常用排序演算法總結

2021-06-21 02:04:23 字數 1392 閱讀 7700

常用排序演算法總結

選擇排序:對於長度為n的陣列,選擇排序需要大約n2/2詞比較和n次交換。

插入排序:對於隨機排列的長度為n且主鍵不重複的陣列:

(1)平均情況下,需要~n2/4次比較以及~ n2/4次交換。

(2)最壞情況下,需要~n2/2次比較以及~ n2/2次交換

(3)最好情況下,需要n-1次比較以及0次交換

特點:插入排序,所需的時間取決於輸入中元素的初始順序。對部分有序的陣列十分高效,也很適合小規模陣列。 插入排序比選擇排序快一倍。

希爾排序:使用遞增序列1,4,13,40,121,… (3*h + 1) 的希爾排序比較次數不會超出n的若干倍乘以遞增序列的長度。

特點:(1)希爾排序高效的原因是權衡了子陣列的規模和有序性(基於插入排序的)。

(2)希爾排序可用於大型陣列,它對任意排序(不一定是隨機的)的陣列表現也很好。

(3)希爾排序比插入排序和選擇排序要快得多,並且陣列越大,優勢越大

歸併排序:最壞情況下的比較次數為nlgn

特點:(1)最大的優點是他能夠保證任意長度為n的陣列排序所需要的時間和nlgn成正比;主要缺點是他所需的額外空間和n成正比。

(2)可以使用歸併排序處理百萬甚至更大規模的陣列。(說明:插入排序很可能在小陣列上比歸併更快)

快速排序:原地排序(只需要乙個很小的輔助棧),且將長度為n的陣列排序所需的時間和nlgn成正比。

特點:(1)比較次數少,而且內迴圈中不需要移動元素。

(2)不適合含有大量重複元素的陣列。

堆排序:將n個元素排序,堆排序只需要少於(2nlgn+2n)次比較(以及一半次數的交換)。

特點:(1)它是唯一能同時最優利用空間和時間的方法,當空間十分緊張時,用堆排序比較合適。

(2)缺點無法利用快取。因為堆排序中陣列元素很少與其他相鄰元素進行比較,因此快取未命中率要遠遠高於大多數比較都在相鄰元素間進行的演算法,如快                                       速排序,歸併排序,甚至是希爾排序。

常用排序演算法總結

總結些常見的排序演算法,方便以後可以重用。資料量不大,為了表達方便就直接使用了陣列。int data null data new int 1.氣泡排序 氣泡排序,從小到大排序 for int i 0 i data.length i 氣泡排序就是說,排序的過程像水裡往上冒的氣泡一樣,每個數字代表乙個氣...

常用排序演算法總結

注 所有排序都是寫的由小到大排序的情況 1.插入排序 1 直接插入排序 穩定 arr sortedindex 1 key 注意這裡的下標 sortedindex 1 2 希爾排序 不穩定 希爾排序好的增量序列的共同特徵 希爾排序演算法 fromid 1801475 type syn 最後乙個增量必須...

常用排序演算法總結

includeusing namespace std show array void show int ar,int len selectsort 直接選擇排序不穩定 最好最壞平均時間複雜度都是o n 2 空間複雜度o 1 void selectsort int ar,int len else ar...