快速排序是對氣泡排序的改進,採用了分治策略(一般也會使用遞迴),因此減少了比較的次數。
設定乙個基準值,這個基準點可以隨意設定,但是一般來說我們選擇第乙個資料。
用left標識陣列的第乙個資料,right標識陣列的最後乙個資料
如果right位上的資料大於基準值,則繼續往後遍歷(right- -);如果小於基準值,則將right位上的值賦值給left位。
讓left往前遍歷, 如果left位上的資料小於基準值,則繼續往前遍歷(left++);如果left位上的值大於基準值,則將left位上的值賦值給right位。
知道left==right這一趟排序就結束了,將基準值賦值給left位
再採用遞迴的方法將基準值位左邊與右邊的兩部分陣列分別進行快速排序。前半部分和後半部分均有序時該陣列就自然有序了。
//排序
intgetindex
(int a,
int left,
int right)
a[left]
=a[right]
;while
(lefta[right]
=a[left];}
a[left]
=num;
return left;
}void
quicksort
(int a[
],left,right)
quicksort
(a,left,index-1)
;quicksort
(a,index+
1,right)
;}
快速排序之所以快,是因為相比氣泡排序,它每次交換都是跳躍式的,不會像氣泡排序一樣每次只能在相鄰的數之間進行交換,交換的距離就大的多。因此總的比較和交換次數就少了,速度自然就提高了。
時間複雜度:o(nlogn)(最壞情況下o(n^2));
空間複雜度:o(log2n)
穩定性:不穩定
排序之快速排序
快速排序的在內排中起到比較重要的作用,平均時間複雜度達到o nlogn 公升序快速排序 1 int partition vector vi,int start,int end 11 vi start key 12return start 13 14void quickcore vector vi,i...
排序之快速排序
有沒有既不浪費空間又可以快一點的排序演算法呢?那就是 快速排序 啦!光聽這個名字是不是就覺得很高階呢。假設我們現在對 6 1 2 7 9 3 4 5 10 8 這個10個數進行排序。首先在這個序列中隨便找乙個數作為基準數 不要被這個名詞嚇到了,就是乙個用來參照的數,待會你就知道它用來做啥的了 為了方...
排序之快速排序
該方法的基本思想是 1 先從數列中取出乙個數作為基準數。2 分割槽過程,將比這個數大的數全放到它的右邊,小於或等於它的數全放到它的左邊。3 再對左右區間重複第二步,直到各區間只有乙個數 o nlogn 出處 includeusing namespace std void quicksort int ...