排序演算法小結 Concept

2021-05-27 15:25:59 字數 1985 閱讀 1932

總結一下目前學過的所有排序演算法:

1 氣泡排序

2 選擇排序

3 快速排序

4 插入排序

5 希爾排序

6 堆排序

7 計數排序

8 合併排序

9 基數排序

10 桶排序

排序分為穩定排序和非穩定排序。

另外還有原地排序,是指不申請多餘的儲存空間來進行排序。

下面分別小結以上排序演算法:

1 氣泡排序:

氣泡排序的思想很簡單:從第乙個元素起,每相鄰兩個元素進行比較,較大的元素下沉。所以每一輪比較下來,最大的元素沉底,較小的元素上浮。

時間複雜度: n * n

屬於穩定排序和原地排序。

2 選擇排序

思想:在未排序序列中找到最小元素,放到起始位置(與起始元素交換位置)。在剩餘元素中挑出最小元素,存放到已排序序列末尾。以此類推。

時間複雜度:n * n

屬於不穩定排序和原地排序。

選擇排序的交換次數比氣泡排序少。

3 快速排序

快速排序採用了分治法,可以用遞迴實現。其基本思想是通過一趟排序,將待排序序列分為兩個部分,其中一部分的元素都比另一部分的元素小。之後再分別對這兩個部分進行相似的快速排序。最終得到有序序列。

時間複雜度:最差(n * n)    最優(n*logn)

屬於不穩定排序,原地排序。

4 插入排序

思想:將資料插入已經排好序的序列中。每次插入資料,從後向前掃瞄已經排好序的資料,找到插入位置後,將其後元素向後移動乙個位置。

時間複雜度:n * n

屬於穩定排序和原地排序。

5 希爾排序(shell)

希爾排序是插入排序的一種改進。其基本思想是按照不同的步長對元素進行插入排序。首先將要排序的序列按照某個步長d分為若干組,對每組元素進行插入排序。再用乙個較小的步長分組,每組進行排序。最終步長減為1進行排序。

希爾排序的關鍵是步長的選擇。

時間複雜度:根據步長序列的不同而不同    最優(n*log2n)

屬於不穩定排序和原地排序。

6 堆排序

n個關鍵字序列kl,k2,…,kn稱為(heap),當且僅當該序列滿足如下性質(簡稱為堆性質):   

(1) ki≤k2i且ki≤k2i+1 或

(2)ki≥k2i且ki≥k2i+1(1≤i≤ n) //ki相當於二叉樹的非葉結點,k2i則是左孩子,k2i+1是右孩子  

若將此序列所儲存的向量r[1..n]看做是一棵完全二叉樹的儲存結構,則堆實質上是滿足如下性質的完全二叉樹:  

樹中任一非葉結點的關鍵字均不大於(或不小於)其左右孩子(若存在)結點的關鍵字。

堆排序首先把要排序的序列看做順序儲存的二叉樹,調整元素的儲存順序使之成為乙個堆。之後將堆頂元素與序列的最後乙個元素對調。然後對前面的n-1個元素進行調整使之成為乙個堆,將堆頂與第n-1個原素對調。以此迴圈。

時間複雜度:nlogn

屬於不穩定排序和原地排序

7 計數排序

計數排序不是比較排序,所以排序速度快於任何比較排序演算法。其基本思想為使用乙個輔助的陣列c。c中的第i個元素是待排序陣列a中值等於i的元素的個數。這樣就很容易知道比i小的元素的個數,從而定位得到a中元素的最終位置。

時間複雜度:當待排序的元素是n個0到k之間的整數時,時間複雜度是n + k

屬於穩定排序和非原地排序

8 合併排序

思想:將前後相鄰的兩個序列兩兩合併,不斷重複從而得到有序序列

時間複雜度:nlogn

屬於穩定排序和非原地排序

9 基數排序

思想:從資料的低位到高位排序。(是桶排序的擴充套件)

時間複雜度:n

屬於穩定排序和非原地排序

10 桶排序

思想:將[0, 1)劃分為n個相同大小的子區間,將n個記錄分配到這些區間中。對於落在每個區間內的資料進行排序(插入排序),最終將各個區間首尾連線即可。

時間複雜度:n

屬於穩定排序和非原地排序

適用於關鍵字取值範圍較小的情況

排序演算法小結

1 快速排序 quicksort 快速排序是乙個就地排序,分而治之,大規模遞迴的演算法。從本質上來說,它是歸併排序的就地版本。快速排序可以由下面四步組成。1 如果不多於1個資料,直接返回。2 一般選擇序列最左邊的值作為支點資料。3 將序列分成2部分,一部分都大於支點資料,另外一部分都小於支點資料。4...

排序演算法小結

1 歸併排序 3.區別與聯絡 遞迴是從未知推到已知,相當於把未知的東西壓入棧,等到可以算出結果了,就一步一步出棧。迭代是從已知到未知,從已知的東西一步一步推至目標。遞迴與迭代就好像一對逆元。遞迴的 更加清晰,但開銷更大,也更容易出錯,除錯較困難 而迭代的 編寫更困難,但速度和開銷較小。4.空間占用 ...

排序演算法小結

演算法過程 假設乙個無序的序列,該演算法將其分成兩部分,前一部分已經完成排序 有序,一開始時只有乙個元素 後一部分任然無序,將後面序列選擇第乙個插入到前面的有序序列,如此直到所有完全有序。複雜度 最簡單的即為,整個序列原來即有序,按照一種最 省事 的方式,我們僅需比較n 1次即可。最複雜的情況,應該...