ACM寒假培訓 各種排序

2021-06-20 04:12:47 字數 2017 閱讀 3652

基本思想:每次遍歷陣列,相鄰的兩個元素比較,(公升序時)如果後面小於前面那麼就交換這兩個數,每次迴圈結束時使得乙個最大數冒泡至陣列尾部。最終實現全部排序。

時間複雜度:o(n^2) 

空間複雜度:

o(1)

優化:由於氣泡排序在進行排序時,遍歷一次的同時可以判斷該陣列是否有序,因而在排序時可以判斷如果當前陣列有序,即可以退出排序。

void bubble_sort(int a,int n)

基本思想:前提為當前部分陣列已經有序,若要將乙個數插入到該陣列中使其依然有序,則只需找到該數字因插入的位置並將其他元素依次平移,使該元素插入。在乙個無序的陣列中進行插入排序,只需將其中某單個元素確定為有序,其他元素依次插入。

時間複雜度:o(n^2) 

空間複雜度:

o(1)

優化:可在查詢位置時利用二分查詢進行優化,可以減少比較次數,但是並不能減少移動次數。故時間複雜度依舊是o(n^2) 

void insertion_sort(int a,int n) //直接插入版

void insertion_sort(int a,int n)

}

基本思想:選出乙個數m

使其左邊的數小於

m右邊的數大於

m,然後最左右兩邊遞迴,利用相同的方式劃分,最終實現全部有序。

時間複雜度:o(nlogn) 

空間複雜度:

o(1)

優化:由於快速排序最壞情況是陣列已經有序此時時間複雜度o(n^2)

,所以可以在選擇

m時使用隨機選擇,以使得其劃分更加有效。

void quick(int low,int high)

a[i]=x;

quick(low,i-1);

quick(i+1,high);

}

宣告:下面這個排序其實不是真正的堆排序,但是能排序,速度沒有堆排快。當時沒有理解,在此糾正一下。

然後又寫了乙個真正的堆排序。

基本思想:在完全二叉樹下構建一棵大根樹,使得根最大,然後把根與末尾子葉交換,並且將末尾乙個節點剪掉,剩下的繼續構建為大根樹,如此迴圈,直到剩下乙個節點為止。即陣列已經完成排序。

時間複雜度:o(nlogn)  

空間複雜度:

o(1)

優化:暫時沒有了解。

我的理解:

前幾種排序之前都有過接觸,而且**也都寫過,

所以比較順手,

但是這個堆卻是第一次接觸,包括樹這種資料結構以及二叉樹的一些定義都是今天才真正了解,

今天聽學長講完之後,也是似懂非懂,

所以就試著

寫了一下堆排序的**。

其實剛開始

時感覺挺難操作,

於是並沒有急於寫**,而是先

分析理解

了二叉樹的特點,以及大根樹的定義,

以及排序的原理。考慮遞迴應該把握的原則,以及情況分類,然後試著在紙上寫出偽**。這也是我第一次用偽**去描述演算法,感覺非常好用。實現的過程還是比較順利的,唯一一點疏忽的就是在輸出時順手寫成了

for(i=0;i),——!找了半天才找到。

第一部分是構建大根樹,要用到遞迴。用遞迴就要思考遞迴出口,和遞迴原則。原則很簡單就是「爹比兒子大」,出口就是「他沒有兒子」。

第二部分是交換位置。大根和末尾的兒子交換、重新構建大根樹。實現並不困難,只是注意每次都要將末尾節點去除。

#includeint a[1001]=; ///a[0]不存放資料。

build_tree(int a,int dad,int n) ///n:整個樹的節點數。a[n]存在。

else if(a[s1]>a[dad]) ///單叉情況

a[0]=a[s1],a[s1]=a[dad],a[dad]=a[0];

}tree_sort(int a,int n)

}

ACM 各種排序

簡單選擇排序 void select sort sqlist l 把無序區最小的挑出來 if i j 直接插入排序 void zhijie sqlist l l r j dk l r 0 插入到正確位置 r move void shellsort sqlist l,int dlta,int t 快速...

寒假培訓總結

寒假培訓報告 本次寒假培訓我們從原來的51最小系統轉換到了stm32,開始了對stm32的學習,主要是通過乙個課題讓我們從新建工程開始,一步步地認識stm32,了解它,最後能夠用它來實現我們想要實現的微控制器功能。題目 基於stm32的超聲波測距顯示系統 基本要求 利用stm32開發完成乙個超聲波測...

ACM寒假集訓

出自 南昌理工學院acm集訓隊 什麼是dfs?void dfs 狀態 a 1.判斷狀態是否合法。合法繼續執行,否則則回到上次呼叫 2.先下走一層,也就是呼叫dfs a void dfs 引數用來表示狀態 if 越界或者是不合法狀態 return if 特殊狀態 剪枝 return for 擴充套件方...