排序演算法彙總

2021-08-01 13:51:11 字數 2641 閱讀 8638

冒泡

第i個元素與第 i+1個元素倆倆相比然後互換位置,第一次迴圈會把最大的元素挪到最後,第二次是把第二大的元素挪到倒數第二。。。。。每次都會把最大的元素不斷往後冒,與選擇排序剛好相反。複雜度:n^2

選擇

用第i個元素比較後面的所有元素,從前往後比較,一直找到最小的乙個挪到最左邊,其實就是替換i的位置,與氣泡排序相反,第一次能找到最小的元素,第二次能找到第二小的元素。。。。複雜度:n^2

插入

從前往後,把每個數往前面合適的地方插入。複雜度:n^2

歸併

把待排序佇列分為n個有序的子佇列,再合併他們,其實也是分治法思想的一種使用。複雜度:n*logn

快速

氣泡排序的進化版,第乙個資料把做全量對比,把比這個數小的放到它左邊,大的放到右邊,然後分別對左右兩部分再進行快排,遞迴計算完成排序。也是分治法的使用,與歸併某種意義上相反:歸併是不斷分成兩份然後合併,快排是不斷分成兩個部分排序,快排一般會比歸併快3倍,並且可以通過隨機化快速排序規避最差情況(n^2),保證nlgn複雜度。複雜度:n^2,但是平均情況很快,達到nlgn

樹型選擇排序

是一種按錦標賽的思想進行排序的方法。

基本思想與體育比賽時的淘汰賽類似。首先將n個物件的排序碼進行兩兩比較,得到n/2個比較的優勝者,作為第一步比較的結果保留下來;然後對這n/2個物件再進行排序碼的兩兩比較,…,如此重複,知道選出乙個排序碼最小的物件為止。類似於一顆二叉樹,只需要把每次比較出的最小值的結點重新設定為∞,再比較出新一輪的最小值出來。複雜度:n*logn

堆排序

對樹形排序的進一步改進,使用乙個大根堆(或者小跟堆)進行排序。堆排序的兩個問題:

1.如何由乙個無序序列「建初堆」。

2.輸出堆頂後,如何「篩選」。篩選指對一顆子樹均為堆的完全二叉樹,調整根節點,使整個二叉樹也成為乙個堆。迴圈輸出堆頂。

統計排序

適用於知道資料範圍的整數排序,預先分配好固定範圍陣列,統計每乙個陣列中數值在待排陣列中出現的頻率,統計結束後也就知道了每乙個數在「排序後」陣列中的位置,知道待排陣列都是10以內的正整數,如:1,2,2,3,2,4,7,7,1。我們用乙個長度為10的陣列統計這個陣列,得到{0,2,5,6,7,7,7,9,9,9}分別對應0~9這個數字知道1在陣列中出現2次,則1在「排序後陣列」中應該出現在(0,1)這兩個索引位置,2在陣列中也出現3次,所以2應該在(2,3,4)這三個索引上,剛好對應上面統計陣列中的index=1,2的值減一。複雜度:n

多關鍵字排序

以撲克牌排序為例,每張撲克牌有兩個關鍵字:花色和面值。可以先按花色排序,之後再按面值排序;也可以先按面值排序,之後再按花色排序。

基數排序

類似於一堆0~999的資料,先按個位排序,再按十位排序,再按百位排序,得到的結果就是最終的排序結果。一般每個位的排序選擇統計排序複雜度:n

以上排序思想可以做乙個大概的分類,如下:

插入類排序:將無序子串行中的乙個或幾個記錄插入到有序序列中,從而增加記錄的有序子串行的長度。例:插入排序。

交換類排序:通過「交換」無序序列中的記錄,從而得到其中關鍵字最小或最大的記錄,並將它加入有序子串行中。例:氣泡排序、快速排序。

選擇類排序:從記錄的無序子串行中,「選擇」關鍵字最小或最大的記錄,並將它加入到有序子串行中,以此方法增加記錄的有序子串行的長度。例:簡單選擇排序,樹型選擇排序,堆排序。

歸併類排序:將兩個或兩個以上的有序資料序列,合併成乙個有序資料序列的過程。例:歸併排序。

分配類排序

主要利用分配和收集兩種基本操作,典型的就是基數排序和多關鍵字排序。

比較排序:只允許比較操作,以上的排序都是比較排序。

決策樹排序:通常會有n個元素需要排序,,對於每乙個內節點(非葉子節點),都會有乙個下標i:j,i和j分別在1~n之間,這個節點表示我們要比較ai和aj,每個內節點下會分出兩顆子樹,左邊的子樹說明ai

排序演算法 排序演算法彙總

排序演算法無疑是學習資料結構中的重點內容,本文將給出排序演算法的彙總。下面是具體的實現 include include include define n 1000000 int array n int temp n 1 氣泡排序 void bubblesort int a,int n if tag ...

排序演算法 排序演算法彙總

排序演算法無疑是學習資料結構中的重點內容,本文將給出排序演算法的彙總。下面是具體的實現 include include include define n 1000000 int array n int temp n 1 氣泡排序 void bubblesort int a,int n if tag ...

排序演算法 排序演算法彙總

排序演算法無疑是學習資料結構中的重點內容,本文將給出排序演算法的彙總。下面是具體的實現 include include include define n 1000000 int array n int temp n 1 氣泡排序 void bubblesort int a,int n if tag ...