常見的幾種排序演算法

2021-08-21 14:37:10 字數 1253 閱讀 9968

1、直接插入排序:把後面未排序部分的首個數插入到前面已排序部分的正確位置上去,直到全部排好順序。直接插入排序是穩定的,演算法時間複雜度o(n^2),空間複雜度為o(1)。

2、shell排序:將要排序的一組數按某個增量g分成若干組,每組中記錄的下標相差g。對每組中全部元素進行直接插入排序,然後縮小增量g,在每組中再進行排序。當增量減到1時,整個要排序的數被分成一組,排序完成。shell排序是不穩定的,演算法時間複雜度可改進到o(nlogn)左右,空間複雜度為o(1)。

3、氣泡排序:對前面未排序部分每相鄰的兩個數進行比較和調整,讓較大的數上浮到後面已排序部分的開頭。氣泡排序是穩定的,演算法時間複雜度o(n^2),空間複雜度為o(1)。

4、快速排序:掃瞄一次元素並不斷地交換,使右邊部分的各個數都比左邊部分大。然後用同樣的方法處理這兩個子串行(用遞迴呼叫)。快速排序是不穩定的,最理想情況演算法時間複雜度o(n*lgn),最壞為o(n^2),空間複雜度為o(logn)~o(n)。

5、選擇排序:在後面未排序的部分中選擇最小的數插入到前面已排序部分的末尾。直到倒數第二個數和最後乙個數比較為止。選擇排序是不穩定的,演算法複雜度o(n^2),空間複雜度為o(1)。

6、堆排序:是對選擇排序的改進。把陣列看作是二叉樹,x[k]的兩個子樹為元素x[2*k]與x[2*k+1]。堆是一棵樹,每個節點的數值不小於其後代節點的數值。初始時把要排序的數的序列看作是一棵順序儲存的二叉樹,調整它們的儲存順序,使之成為乙個堆,這時堆的根節點的數最大。然後將根節點與堆的最後乙個節點交換。然後對前面n-1個數重新調整使之成為堆。依此類推,直到只有兩個節點的堆,並對它們作交換,最後得到有n個節點的有序序列。堆排序是不穩定的,演算法時間複雜度o(n*lgn),空間複雜度為o(1)。

注意堆排序需要兩個過程,一是建立堆,二是堆頂與堆的最後乙個元素交換位置。所以堆排序有兩個函式組成,一是建堆的調整函式,二是反覆呼叫實現排序的函式。

7、歸併排序:設兩個有序的子串行(相當於輸入堆)放在同一向量中相鄰的位置上r[low..m],r[m+1..high],先將它們合併到乙個區域性的暫存向量r1(相當於輸出堆)中,待合併完成後將r1複製回r[low..high]中。歸併排序是穩定的,演算法時間複雜度為o(n*lgn),空間複雜度需要o(n)。

幾種常見排序演算法

幾種常見排序演算法 1氣泡排序 bubble sort 氣泡排序思路 將序列當中的左右元素,依次比較,保證右邊的元素始終大於左邊的元素 第一輪結束後,序列最後乙個元素一定是當前序列的最大值 對序列當中剩下的n 1個元素再次執行步驟1。3.對於長度為n的序列,一共需要執行n 1輪比較 實現 for i...

幾種常見排序演算法

1氣泡排序 bubble sort 氣泡排序思路 1.將序列當中的左右元素,依次比較,保證右邊的元素始終大於左邊的元素 第一輪結束後,序列最後乙個元素一定是當前序列的最大值 2.對序列當中剩下的n 1個元素再次執行步驟1。3.對於長度為n的序列,一共需要執行n 1輪比較 實現 for i 0 i n...

幾種常見排序演算法

以下內容包括 氣泡排序,選擇排序,桶排序 一 氣泡排序 bubblesort public class bubblesort int temp 0 for int i 0 i1 i system.out.println arrays.tostring arr 用arrays類中的tostring方法...