常用的排序

2021-07-02 07:33:27 字數 1344 閱讀 8426

直接排序,堆排序,歸併排序氣泡排序,快速排序,基數排序,桶式排序,直接插入排序,折半插入排序,shell排序,雞尾酒排序,鴿巢排序,二叉樹排序,b-樹排序

氣泡排序:兩兩比較待排序資料元素的大小,發現兩個資料元素的次序相反時即進行交換,直到沒有反序的資料元素為止。演算法時間複雜度是o(n^2)。

選擇排序:每一趟從待排序的資料元素中選出最小(或最大)的乙個元素,順序放在已排好序的數列的最後,直到全部待排序的資料元素排完,演算法複雜度是o(n^2)。

插入排序:每次將乙個待排序的資料元素,插入到前面已經排好序的數列中的適當位置,使數列依然有序;直到待排序資料元素全部插入完為止。演算法時間複雜度是o(n^2)

快速排序:在當前無序區r[1..h]中任取乙個資料元素作為比較的"基準"(不妨記為x),用此基準將當前無序區劃分為左右兩個較小的無序區:r[1..i-1]和r[i+1..h],且左邊的無序子區中資料元素均小於等於基準元素,右邊的無序子區中資料元素均大於等於基準元素,而基準x則位於最終排序的位置上,即r[1..i-1]≤x.key≤r[i+1..h](1≤i≤h),當r[1..i-1]和r[i+1..h]均非空時,分別對它們進行上述的劃分過程,直至所有無序子區中的資料元素均已排序為止。不穩定,最理想情況演算法時間複雜度o(nlog2n),最壞o(n^2)。最壞情況:當每次pivot選擇恰好都把列表元素分成了(1,n-1)

堆排序:堆排序是一樹形選擇排序,在排序過程中,將r[1..n]看成是一顆完全二叉樹的順序儲存結構,利用完全二叉樹中雙親結點和孩子結點之間的內在關係來選擇最小的元素。演算法時間複雜度o(nlogn)。

希爾排序:其實就是用步長控制的插入排序,希爾排序通過加大插入排序中元素之間的間隔,並在這些有間隔的元素中進行插入排序,從而讓資料項可以大幅度移動,這樣的方式可以使每次移動之後的資料離他們在最終序列中的位置相差不大,保證資料的基本有序,大大提公升了排序速度,運算時間複雜度n*logn。

歸併排序

divide: 把長度為n的輸入序列分成兩個長度為n/2的子串行。

conquer: 對這兩個子串行分別採用歸併排序。

combine: 將兩個排序好的子串行合併成乙個最終的排序序列。

時間複雜度是o(nlog2n)。

選擇排序、快速排序、希爾排序、堆排序不是穩定的排序演算法,而氣泡排序、插入排序、歸併排序和基數排序是穩定的排序演算法。

常用的排序

排序有內部排序和外部排序,內部排序是資料記錄在記憶體中進行排序,而外部排序是因排序的資料很大,一次不能容納全部的排序記錄,在排序過程中需要訪問外存,排序作為最常用的演算法之一掌握幾種最常用的是有必要的。基本思想 用第乙個數字和所有數字比較替換,因為替換的是第i個數字所以就繼續比較就好。public ...

最常用的排序 快速排序

是一種不浪費空間又可以快一點的排序演算法。假設對 6 1 2 7 9 3 4 5 10 8 這10個數進行排序。首先在這個序列裡隨便找乙個數作為基準數。為了方便,讓6作為基準數,將這個序列中所有比基準數大的數放在6的右邊,比基準數小的數放在6的左邊。方法 分別從初始序列 6 1 2 7 9 3 4 ...

最常用的排序 快速排序

相對於桶排序,節省了空間,相對於氣泡排序,節省了時間,可謂是兩者兼顧的一種更優化的演算法 實現 假設有 初始序列 6 1 2 7 9 3 4 5 10 8 那麼從初始序列的兩端開始探測。先從右往左找到乙個比6小的數,然後在從左往右找到乙個比6大的數,然後交換他們。6 1 259 3 4710 8 這...