幾種常見的排序演算法

2022-08-11 23:51:22 字數 1839 閱讀 3420

1.插入類排序

在乙個已經有序的序列中,插入乙個新的記錄。有直接插入排序、折半插入排序、希爾排序。

插入類排序

直接插入排序

1

void insertsort(int r, intn)2

14 r[j + 1] =temp;15}

16 }

最壞情況下,時間複雜度為o(n^2)

,最好的情況下為

o(n)

。平均時間複雜度為

o(n^2)

。演算法所需額外空間只有乙個temp

,所以空間複雜度為

o(1)

。希爾排序

希爾排序又叫縮小增量排序,其本質還是插入排序,只是將待排序的序列按照某種規則分成幾個子串行,分別對這幾個子串行進行直接插入排序。這個規則就是增量,按照縮小增量的規則,希爾排序的每趟排序都會使整個序列更加有序。等到基本有序,再來一趟直接插入排序,使排序效率更高。

希爾排序的平均時間複雜度為o(nlogn)

,空間複雜度為

o(1)

。2.交換類排序

每一趟排序,都通過一系列交換動作,讓乙個記錄排到它最終的位置上。有氣泡排序。快速排序。

氣泡排序

氣泡排序演算法結束的條件是在一趟排序過程中沒有發生元素交換。

氣泡排序

氣泡排序演算法結束的條件是在一趟排序過程中沒有發生元素交換。

1

void bubblesort(int r, intn)2

15}16}

17 }

最壞情況下,時間複雜度為o(n^2)

,最好的情況下為

o(n)

。平均時間複雜度為

o(n^2)

。演算法所需額外空間只有乙個temp

,所以空間複雜度為

o(1)

。快速排序

1

void quicksort(int r, int l, intr)2

14while (i < j && temp >r[i])

15 ++i;

16if (i 1720

}21 r[i] =temp;

22 quicksort(r, l, i - 1

);23 quicksort(r, i + 1

, r);24}

25 }

快排最好情況下時間複雜度為o(nlogn)

,序列越接近無序;最壞情況下為

o(n^2)

。平均時間複雜度為

o(nlogn)

。就平均時間而言,快排是所有排序演算法中最好的。快排的排序趟數和初始序列有關。空間複雜度為

o(logn)

,因為遞迴需要棧的輔助。

3.選擇類排序

每一趟排序,都選出乙個最小(或最大)的記錄,把它和序列中的第乙個(或最後乙個)記錄交換,這樣乙個最值記錄到位。有簡單選擇排序、堆排序。

簡單選擇排序

1

void selectsort(int r, intn)2

13 temp =r[i];

14 r[i] =r[k];

15 r[k] =temp;16}

17 }

簡單選擇排序的時間複雜度為o(n^2)

,空間複雜度為

o(1)

。4.歸併類排序

歸併就是將兩個或以上的有序序列合併成乙個新的有序序列。

5.基數類的排序

基於多關鍵字的思想,將乙個邏輯關鍵字拆分成多個關鍵字。

幾種常見排序演算法

幾種常見排序演算法 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方法...