排序演算法概述

2021-06-07 10:13:18 字數 1207 閱讀 2897

所謂排序,就是使一串記錄,按照其中的某個或某些關鍵字的大小,遞增或遞減的排列起來的操作。不穩定排序演算法可能會在相等的鍵值中改變紀錄的相對次序,但是穩定排序演算法從來不會如此。

排序大概分為四類:

交換排序:包括氣泡排序,快速排序。

選擇排序:包括直接選擇排序,堆排序。

插入排序:包括直接插入排序,希爾排序。

合併排序:合併排序。

評估排序演算法的三大因素: l

穩定度:穩定排序演算法會依照相等的關鍵(換言之就是值)維持紀錄的相對次序。也就是乙個排序演算法是穩定的,就是當有兩個有相等關鍵的紀錄r和s,且在原本的列表中r出現在s之前,在排序過的列表中r也將會是在s之前。 l

計算的複雜度(最差、平均、和最好效能),依據列表(list)的大小(n)。一般而言,好的效能是o(n log n),且壞的效能是o(n2)。對於乙個排序理想的效能是o(n)。僅使用乙個抽象關鍵比較運算的排序演算法總平均上總是至少需要o(n logn)。 l

記憶體使用量(以及其他電腦資源的使用)

穩定度分類:

穩定的:

氣泡排序(bubble sort)—o(n2)

插入排序(insertion sort)—o(n2)

合併排序(merge sort)—o(n log n); 需要o(n) 額外空間

不穩定:

選擇排序(selection sort)—o(n2)

希爾排序(shell sort)—o(n log n) 如果使用最佳的現在版本

堆排序(heapsort)—o(n log n)

快速排序(quicksort)—o(n log n) 期望時間, o(n2) 最壞情況;

對於大的、亂數列表一般相信是最快的已知排序

平均時間複雜度由高到低為:

氣泡排序o(n2)

插入排序o(n2)

選擇排序o(n2)

歸併排序o(n log n)

堆排序o(n log n)

快速排序o(n log n)

希爾排序o(n1.25)

基數排序o(n)

說明:雖然完全逆續的情況下,快速排序會降到選擇排序的速度,不過從概率角度來說(參考資訊學理論,和概率學),不對演算法做程式設計上優化時,快速排序的平均速度比堆排序要快一些。

實際測試結果(摘維基百科):

排序演算法概述

所謂排序,就是根據排序碼的遞增或者遞減順序把資料元素依次排列起來,使一組任意排列的元素變為一組按其排序碼線性有序的元素。本文將介紹八種最為經典常用的內部排序演算法,包括插入排序 直接插入排序,希爾排序 選擇排序 直接選擇排序,堆排序 交換排序 氣泡排序,快速排序 歸併排序 分配排序 基數排序 實際上...

排序演算法概述

提到排序演算法我們要知道兩個經常提到的概念 1 排序演算法的穩定性 所謂 穩定性 是 指,在待排序陣列出現的兩個相同的元素,排序之後相對維持保持不變。比如 待排序陣列為arr 排序之後元素變為arr new 並且arr new中的第乙個是arr中的第乙個1,arr new中的第二個1是arr中的第二...

排序演算法 一 概述

排序是程式開發中一種非常常見的操作,對一組任意的資料元素 或記錄 經過排序操作後,就可以把他們變成一組按關鍵字排序的有序佇列。對於排序演算法從以下幾點去衡量演算法的優劣 時間複雜度,所謂時間複雜度就是將一組數從無序到有序所花費的時間,通常使用乙個量級去衡量,比如o n 或者 o n n 空間複雜度,...