為什麼需要複習排序演算法,因為面對許多資料處理的時候,我們需要有限考慮時間複雜度,基本排序演算法能夠給我們很多靈感!
資料結構
不定最差時間複雜度
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種方法 自下...