幾種排序演算法的特性總結

2021-08-18 04:05:43 字數 1572 閱讀 7619

****

之後就重點說一下堆排序和快排的選擇問題

各種常用排序演算法

類別排序方法

時間複雜度

空間複雜度

穩定性複雜性

特點最好

平均最壞

輔助儲存

簡單插入

排序直接插入

o(n)

o(n2)

o(n2)

o(1)

穩定簡單 

希爾排序

o(n)

o(n1.3)

o(n2)

o(1)

不穩定複雜

選擇排序

直接選擇

o(n)

o(n2)

o(n2)

o(1)

不穩定堆排序

o(n*log2n)

o(n*log2n)

o(n*log2n)

o(1)

不穩定複雜

交換排序

氣泡排序

o(n)

o(n2)

o(n2)

o(1)

穩定簡單

1、氣泡排序是一種用時間換空間的排序方法,n小時好

2、最壞情況是把順序的排列變成逆序,或者把逆序的數列變成順序,最差時間複雜度o(n^2)只是表示其操作次數的數量級

3、最好的情況是資料本來就有序,複雜度為o(n)

快速排序

o(n*log2n)

o(n*log2n) 

o(n2)

o(log2n)~o(n) 

不穩定複雜

1、n大時好,快速排序比較占用記憶體,記憶體隨n的增大而增大,但卻是效率高不穩定的排序演算法。

2、劃分之後一邊是乙個,一邊是n-1個,

這種極端情況的時間複雜度就是o(n^2)

3、最好的情況是每次都能均勻的劃分序列,o(n*log2n)

歸併排序

o(n*log2n) 

o(n*log2n) 

o(n*log2n) 

o(n)

穩定複雜

1、n大時好,歸併比較占用記憶體,記憶體隨n的增大而增大,但卻是效率高且穩定的排序演算法。

基數排序

o(d(r+n))

o(d(r+n))

o(d(r+n))

o(rd+n)

穩定複雜

注:r代表關鍵字基數,d代表長度,n代表關鍵字個數

大家可以看到,堆排序的時間複雜度是很穩定的,而快排的時間複雜度最壞情況下會到n^2,那麼為什麼不都用堆排序呢?

首先,時間複雜度這個概念只是乙個粗略的估計概念,在真實情況下, 一般快排的效率比堆排序高很多。

快排:陣列中交換資料,在資料量不是特別大,而且離散程度較高的情況下效率很高

堆排序:建立堆,資料交換,調整堆的時間均很多

所以在實際應用中,我們用快排會更多一點。

堆排序的典型應用:在100萬個數字中找出最大的100個這種問題,構建乙個小頂堆然後遍歷調整就可以了

為什麼是小頂堆:小頂堆,最小的數就在最上面,只要與最上面的數進行比較就可以了,所以是小頂

幾種排序演算法總結

注 以下所有排序演算法都是按照整數值從小到大排序。思想 對於乙個序列,走一趟把最大數冒到最後面。示例 對於序列4,10,1,6,2,7,3,8如下圖 紅框表示下一趟需要處理的子串行 即總共需要走n趟,當第i趟走完時倒數i個數是有序的。for i 0 i n i 優化 由上面的示意圖可知,當第4趟走完...

幾種經典排序演算法的總結

假期即將結束,用最後這兩天溫習一下幾種經典排序演算法,總結一下,如有錯誤,請不吝指出 1.基本概念 1 穩定排序 當待排元素中有相同元素時,排序完後這些相同元素的相對位置與原來一致。例如 1a 2a,5,4,1b 3,2b 排序完後 1a 1b,2a 2b,3,4,5 2 原地排序 指排序時只需要使...

幾種常見的排序演算法總結

所謂排序,就是使一串記錄,按照其中的某個或某些關鍵字的大小,遞增或遞減的排列起來的操作。排序演算法,就是如何使得記錄按照要求排列的方法。排序演算法在很多領域得到相當地重視,尤其是在大量資料的處理方面。乙個優秀的演算法可以節省大量的資源。在各個領域中考慮到資料的各種限制和規範,要得到乙個符合實際的優秀...