八大排序---排序算法比較總結

排序名稱:直接插入排序(insertsort)
時間複雜度:O(n平方)
時間複雜度備註:若查找時從前往後找,最好的情況(1 2 3 4 5),時間複雜度還是O(n平方),因爲在查找合理位置的時候找的次數太多,所以改進方法是找合理位置的時候是從後往前找,而不是從前往後找;所以最好的情況(必須從後往前找)時間複雜度是O(n)
空間複雜度:O(1)
空間複雜度備註:
穩定性:穩定
穩定性備註:穩定,因爲兩兩比較
備註:直接插入排序最大的特點,越有序越快(但是是快速排序最大的缺點,越有序越慢)

排序名稱:希爾排序(shellsort)
時間複雜度:O(n的1.3到1.5次方)
時間複雜度備註:它的時間是所取“增量”序列的函數,這涉及一些數學上尚未解決的難題。增量序列可以有多種取法,但需注意:應使增量序列中的值沒有除1以外的公因子(取的組數相互之間互素),並且最後一個增量值必須等於1;
空間複雜度:O(1)
空間複雜度備註:雖然用了一個增量數組,但是組數相對於總數來說很少
穩定性:不穩定
穩定性備註:只要是跳躍式的交換就不穩定
備註:間隔分組

排序名稱:冒泡排序(bubblesort
時間複雜度:O(n平方)
時間複雜度備註:
空間複雜度:O(1)
空間複雜度備註:
穩定性:穩定
穩定性備註:穩定,因爲兩兩比較
備註:1 2 3 4 5,冒泡的時間複雜度是O(n平方),對冒泡可以優化,加一個狀態變量,如果所有的數據連一次都沒有進行交換(說明已經有序),則冒泡結束,時間複雜度是O(n)

排序名稱:快速排序(quicksort)
時間複雜度:O(n*log2 n)(以2爲底,對n取對數)
時間複雜度備註:一次劃分的時間複雜度是O(n),雖然是雙層while循環,但是隻遍歷了一遍;遞歸的時間複雜度是O(log2 n)(以2爲底,對n取對數),因爲每次劃分都是截一半
空間複雜度:O(log2 n)(以2爲底,對n取對數)
空間複雜度備註:一次劃分的空間複雜度是O(1),遞歸的空間複雜度是O(log2 n)(以2爲底,對n取對數),因爲遞歸依賴於棧。
穩定性:不穩定
穩定性備註:因爲跳躍式交換
備註:對於快速排序,越有序越差;完全有序,退化成選擇排序,時間複雜度是O(n平方)   就平均性能而言,快速排序是所有排序中比較好的

排序名稱:選擇法排序(selectsort)
時間複雜度:O(n平方)
時間複雜度備註:
空間複雜度:O(1)
空間複雜度備註:
穩定性:不穩定
穩定性備註:不穩定,因爲不是兩兩比較,跳躍式交換,是簡單排序(O(n平方)的算法都是簡單排序)裏面唯一一個不穩定的算法
備註:最好的情況是:1 2 3 4 5,選擇排序的時間複雜度是O(n平方)

排序名稱:堆排序(heapsort)
時間複雜度:O(n*log2 n)(以2爲底,對n取對數)
時間複雜度備註:一次調整函數的時間複雜度是O(log2 n)(以2爲底,對n取對數),建立大根堆的時間複雜度是O(n*log2 n)(以2爲底,對n取對數)
空間複雜度:O(1)
空間複雜度備註:
穩定性:不穩定
穩定性備註:跳躍式交換父和子
備註:堆排序是對選擇排序的改進算法

排序名稱:歸併排序(mergesort)
時間複雜度:O(n*log2 n)(以2爲底,對n取對數)
時間複雜度備註:
空間複雜度:O(n)
空間複雜度備註:需要創建一個額外的數組保存歸併的數據
穩定性:穩定
穩定性備註:因爲是兩兩比較
備註:歸併排序是速度快裏面唯一的一個穩定的算法,但是它的缺點是空間複雜度大

排序名稱:基數排序(俗稱桶排序)(radixsort)
時間複雜度:O(d*n)
時間複雜度備註:d爲進桶出桶的趟數,d比較小,所以有的書上說是O(n);函數RadixSort的時間複雜度是O(d),d爲進桶出桶的趟數,函數Radix的時間複雜度是O(n)
空間複雜度:O(n)
空間複雜度備註:空間複雜度是O(n+r),r是桶的個數,即有的直接說是O(n)
穩定性:穩定
穩定性備註:
備註:
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章