常用排序演算法

2021-10-05 17:11:49 字數 3043 閱讀 1667

最簡單的演算法之一就是插入排序,插入排序的時間複雜度是o(n2),並且這個界是精確的,如果輸入是反序的,即可達到該邊界,如果輸入資料已經預先排序,那麼執行時間是o(n)。平均情況是o(n2)。

}}希爾排序是插入排序的公升級版,插入排序是每隔乙個進行插入,而希爾排序是隔gap個間隔進行排序,其中gap是陣列長度的一半,並且每次減半。其時間複雜度計算十分複雜,這裡只說明結果。當使用謝爾增量時最壞時間複雜度是o(n2),當使用hibbard增量時,最壞時間是o(n3/2)。不同的謝爾增量速度不同。

}堆排序是在優先佇列(堆)的基礎上

歸併排序就是乙個遞迴的呼叫,將乙個陣列分拆成兩部分,先左部分排序,再右半部分排序,最後將兩部分合起來再排序。

//合併左右兩部分

template

<

typename comparable>

void

merge

(vector

& a, vector

&temparray,

int left,

int center,

int right)

while

(left <= center)

temparray[index++

]= a[left++];

while

(rightstart <= right)

temparray[index++

]= a[rightstart++];

for(

int i =

0; i < numsize;

++i,right--)}

template

<

typename comparable>

void

mergesort

(vector

&a, vector

&temparray,

int left,

int right)

}template

<

typename comparable>

void

mergesort

(vector

&a)

注意快排不要使用第乙個元素作為樞紐元,這樣速度會很慢,最好的是選擇中位數作為樞紐元。

//選擇中位數作為樞紐元

不同演算法在資料量不同時其效率也不一樣,快排在資料量大於10時是最快的。

常用排序演算法

筆者最近學習演算法,學了很久也只弄懂了幾個排序演算法,在這裡曬一下下,作為以後參考之用。一 為什麼要研究排序問題 許多計算機科學家認為,排序演算法是演算法學習中最基本的問題,原因有以下幾點 l有時候應用程式本身需要對資訊進行排序,如為了準備客戶賬目,銀行需要對支票賬號進行排序 l很多演算法將排序作為...

常用排序演算法

一 簡單排序演算法 由於程式比較簡單,所以沒有加什麼注釋。所有的程式都給出了完整的執行 並在我的vc環境 下執行通過。因為沒有涉及mfc和windows的內容,所以在borland c 的平台上應該也不會有什麼 問題的。在 的後面給出了執行過程示意,希望對理解有幫助。1.冒泡法 這是最原始,也是眾所...

常用排序演算法

排序演算法 最好時間 平均時間 最壞時間 輔助空間 穩定性 直接插入排序 o n o n 2 o n 2 o 1 穩定 希爾排序 o n 1.3 o 1 不穩定 直接選擇排序 o n 2 o n 2 o n 2 o 1 不穩定 堆排序 o n x lbn o n x lbn o n x lbn o ...