C 實現集中常見的排序演算法

2022-04-25 08:01:08 字數 1693 閱讀 8445

為什麼需要複習排序演算法,因為面對許多資料處理的時候,我們需要有限考慮時間複雜度,基本排序演算法能夠給我們很多靈感!

資料結構

不定最差時間複雜度

o(n^2)

最優時間複雜度

o (n*log n)

平均時間複雜度

o (n*log n)

最差空間複雜度

根據實現的方式不同而不同

快速排序法:

產生隨機數組

18void makerandvec(vector&vec, int

num)

1925}26

27//

<5>快速排序 左邊挖坑 - 從右邊找人填坑 - 右邊挖坑 - 從左邊找人填坑

28void quicksort(vector& vec, int start, int

end)

29//

這裡找到了3,下面準備入坑(上面的 )

44if (i

4549

//從左向右找到比i指向元素大的元素來填上面的

50while (i < j && vec[i]

51//

這裡找到了8,下面準備入坑

54if (i

5559}60

//此時將基準數放到 i的 位置(此時 i = j; 且左邊都比vec[i]小,右邊都比vec[i]大)

61 vec[i] = temp; //

3 2 1 0 4 5 8 9

62 quicksort(vec, start, i - 1); //

遞迴,對左邊

63 quicksort(vec, i + 1, end); //

遞迴,對右邊64}

65}66#define max 20

6768

intmain()

69思考:例如對於 陣列 a = 4 2 8 0 5 7 1 3 9 進行排序;

1、取temp = 4;此時 a =  2 8 0 5 7 1 3 9;

2、從右向左遍歷,找乙個比temp小的數,也即3,填坑得 a = 3 2 8 0 5 7 1 9;

3、從左向右遍歷,找乙個比temp大的數,也即8,填坑得 a = 3 2 0 5 7 1 8 9;

c 中常見的演算法 希爾排序

希爾排序 也稱遞減增量排序演算法,是插入排序的一種更高效的改進版本。但希爾排序是非穩定排序演算法。希爾排序是基於插入排序的以下兩點性質而提出改進方法的 1,插入排序在對幾乎已經排好序的資料操作時,效率高,即可以達到線性排序的效率 2,但插入排序一般來說是低效的,因為插入排序每次只能將資料移動一位 希...

c 中常見的演算法 氣泡排序

氣泡排序 bubble sort 是一種直觀的排序演算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越小的元素會經由交換慢慢 浮 到數列的頂端。演算法思路 1,...

c 中常見的演算法 歸併排序

歸併排序 merge sort 是建立在歸併並操作上的一種有效的排序演算法。該演算法是採用分治法 divide and conquer 的乙個非常典型的應用。作為一種典型的分而治之思想的演算法應用,歸併排序的實現由兩種方法 自上而下的遞迴歸 所有遞迴的方法都可以用重組重寫,所以就有了第2種方法 自下...