所謂排序,就是使一串記錄,按照其中的某個或某些關鍵字的大小,遞增或遞減的排列起來的操作。不穩定排序演算法可能會在相等的鍵值中改變紀錄的相對次序,但是穩定排序演算法從來不會如此。
排序大概分為四類:
交換排序:包括氣泡排序,快速排序。
選擇排序:包括直接選擇排序,堆排序。
插入排序:包括直接插入排序,希爾排序。
合併排序:合併排序。
評估排序演算法的三大因素: 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 空間複雜度,...