排序演算法總結

2021-08-03 09:59:56 字數 1794 閱讀 6685

排序總結

2、經典演算法時間複雜度

o(1) 

快排的最壞情況:初始是逆序的,時間複雜度為n^2,最好情況每次選擇的軸心最均勻,為logn

3、空間複雜度:

o(1):插入 選擇 冒泡 希爾 堆排序

o(logn)~o(n):快排

。快排這種演算法需要棧的支援,棧的大小logn~n,所以最壞情況下為o(logn)~o(n)。每次遞迴傳入引數left、right,平均遞迴次數是logn,所以平均空間複雜度為o(logn),最壞情況初始是逆序的,遞迴n次。

o(n):歸併

o(m):計數排序 基數排序 ,m為桶數

堆排序如果採用遞迴實現的話,那麼它的空間複雜度也是o(logn),如果採用非遞迴實現,則是o(1)

4、穩定性:

(1)穩定:冒泡 插入 歸併 計數 基數 桶。

(2)不穩定:選擇 快排 希爾 堆。

1)選擇:2a  2b  2c 1,選最小的1和第乙個2a交換-->1 2b 2c 2a 

2)堆:5a 5b 5c,最大堆5a是根 5c是右孩子(尾節點),此時根尾交換位置,5c 5b (5a) 最終結果為5c 5b 5a。

3)快排:4 3a 3b 3c 5如果選擇3b為軸心,那麼結果變成4 3a 3c 3b 5

4)希爾:5a 1a 1b 5b,步長為2,5a 1b比較 結果為1b 1a 5a 5b。

5、說明:

(1)快速排序和堆排序歸併排序相比,雖然都是o(nlogn),但其常量係數相對而言比較低,所以叫快排

(2)工程排序:

1)工程排序是一種綜合排序

2)陣列較小時,選插入排序

陣列較大時,選快排或其他時間複雜度為o(nlogn)的排序

排序相關題目:

(1)幾乎有序的陣列(如果陣列排好序

每個元素移動距離不大於k

),選擇哪種排序演算法。

插入排序

:與輸入序列的順序有關,對於這道題能夠做到 

o(nk)

,效果很好。快排、冒泡、選擇、歸併等都和原始順序無關,所以時間複雜度還是原來的。

但該題目答案是,

改進的堆排序演算法

。假設序列a[0~n],因為每個元素移動距離不超過k,所以最小值一定在a[0~k-1]中;

將a[0~k-1]組成最小堆

,堆頂就是最小值,彈出堆頂將其放到a[0]處。將a[k]放到堆頂,維持最小堆,此時第二小的數會出現在新堆頂,彈出堆頂放在a[1]處。接下來將a[k+1]放到堆頂,維持最小堆,彈出堆頂。每次彈出的元素有序。維持最小堆特性的時間複雜度為o(logk),即堆的大小<=k,共有n個元素,所以該排序演算法的時間複雜度為

o(nlogk)

(2)判斷陣列是否有重複值出現,要求

空間複雜度為o(1)。

如果不要求空間複雜度的話,應該選用雜湊表方式實現(時間空間複雜度o(n))。要求空間複雜度為o(1)則先對陣列進行原地排序,然後檢視是否有相鄰兩個數相等適合該題目的排序演算法最好為

非遞迴版本的堆排序。

(3)兩個有序陣列a和b,將陣列有序合併到a中(a的大小恰好為a+b的長度)

例如,a:2 4 6 ,b: 1 3 5。從後向前比較,a[2]和b[2]比較->a[5]=6; a[1]和b[2]比較->a[4]=5; a[1]和b[1]比較,a[3]=4.知道最後確定a[0]的值

排序演算法總結

1 直接插入排序 1 穩定性 穩定 2 適用情況 待排記錄規模較小,或者記錄已經基本有序 2 希爾排序 1 穩定性 不穩定 2 特點 希爾排序的執行時間依賴於增量序列,它的效率比直接插入排序有較大的改進。3 氣泡排序 1 穩定性 穩定 2 特點 當待排記錄基本有序是,氣泡排序是不錯的選擇 但由於氣泡...

排序演算法總結

1 選擇排序 選擇排序的思想是依次從待排序數列中選擇最大 小 的 第二大 小 的等等,然後依次重新排列為有序數列。void selectionsort int a,int n if min i 時間複雜度o n 2 2 歸併排序 void merge int a,int left,int mid,i...

排序演算法總結

學習了這麼多的排序演算法,還沒有做個總結,呵呵 氣泡排序 氣泡排序是最慢的排序演算法。在實際運用中它是效率最低的演算法。它通過一趟又一趟地比較陣列中的每乙個元素,使較大的資料下沉,較小的資料上公升。它是 o n 2 的演算法。快速排序 快速排序是乙個就地排序,分而治之,大規模遞迴的演算法。從本質上來...