排序演算法 8 對比與總結

2021-10-19 10:33:49 字數 1872 閱讀 4350

排序演算法

時間複雜度

空間複雜度

排序方式

穩定性平均情況

最好情況

最壞情況

氣泡排序

o(n*n)

o(n)

o(n*n)

o(1)

內排序穩定

簡單選擇排序

o(n*n)

o(n*n)

o(n*n)

o(1)

內排序不穩定

直接插入排序

o(n*n)

o(n)

o(n*n)

o(1)

內排序穩定

希爾排序

o(n^1.3)

o(n)

o(n*n)

o(1)

內排序不穩定

歸併排序

o(nlogn)

o(nlogn)

o(nlogn)

o(n)

外排序穩定

快速排序

o(nlogn)

o(nlogn)

o(n*n)

o(logn)

內排序不穩定

堆排序o(nlogn)

o(nlogn)

o(nlogn)

o(1)

內排序不穩定

計數排序

o(n+k)

o(n+k)

o(n+k)

o(k)

外排序穩定

桶排序o(n+k)

o(n+k)

o(n*n)

o(n+k)

外排序穩定

基數排序

o(n*k)

o(n*k)

o(n*k)

o(n+k)

外排序穩定

注:1. 歸併排序的空間複雜度是o(n),要是用手搖演算法來實現原地歸併。則空間複雜度是o(1)。

2.排序演算法穩定性:排序前後相同元素的相對位置不變,則稱排序演算法是穩定的;否則排序演算法是不穩定的。

1. 插入排序: 直接插入排序 、希爾排序。

2.選擇排序:簡單選擇排序、堆排序。

3.交換排序:氣泡排序、快速排序

每種排序演算法都有優缺點。因此需要根據業務情況,結合演算法的優缺點來選擇排序演算法。

1. 待排序集合有序或基本有序

直接插入排序和氣泡排序將大大減少比較次數和移動記錄的次數,時間複雜度可降至o(n);

原表是否有序,對簡單選擇排序、堆排序、歸併排序和基數排序的時間複雜度影響不大。

2. 當待排序集合資料量比較大時

選用平均時間複雜度為o(nlogn)的演算法。也就是快速排序,歸併排序,堆排序。

快速排序是內部排序中被認為是最好的排序方法,待排序集合資料是隨機分布的,使用快速排序比堆排序和歸併排序效率高2到3倍。但是快速排序的缺點是不穩定,當集合資料越接近有序時,最壞情況時間複雜度為o(n^2)。

如果要求穩定性,則使用歸併排序。缺點,需要同樣大小的的儲存空間。

堆排序,時間複雜度不會出現比較壞的情況。如果對時間複雜度的最壞情況有要求,則使用堆排序。

3. 當待排序集合資料量比較小時(小於50)

使用簡單選擇排序或者直接插入排序。

4. 資料中重複的資料比較多

使用歸併排序或者希爾排序。          

計數排序、桶排序、基數排序,暫時沒研究,不分析。

排序演算法的比較與總結

歸併 穩定,o nlogn 遞迴實現 大類排序方法 時間複雜度 空間複雜度 穩定性實現方法 備註交換法 冒泡法最差 平均都是o n 2 最好是o n 1穩定 n較小時較好 交換法雞尾酒冒泡法 最差 平均都是o n 2 最好是o n 1穩定 n較小時較好 交換法快速排序 平均o nlogn 最壞是o ...

演算法 排序演算法的介紹與總結(三)

1 什麼是堆 堆是一種樹結構,更準確的說是完全二叉樹。並且每個非葉節點的資料大於或等於 小於或等於 其左 右子結點的資料,這樣堆結構的根結點為最大值 最小值 堆稱為最大堆 最小堆 所以可以歸納為 堆是乙個完全二叉樹,非葉結點與左右子結點的資料有一定的大小關係。2 什麼是堆排序 完整的堆排序需要經過反...

排序演算法總結對比

常用排序演算法分析 void swap int x,int y 氣泡排序 時間複雜度為o n 2 兩兩比較,交換,每次內層迴圈在未排序序列中找出最大值放到已排序中 對於部分有序的序列來說,效率較高 穩定 void bubble sort int arr,int start,int end if po...