#include
#pragma warning(disable:4996)
void
quicksort
(int
*arr,
int left,
int right)
//否則的話,如遞迴所有控制項路徑,函式將導致執行時堆疊溢位
int l = left;
int r = right;
int key = arr[left]
;//找第乙個數為基準數
//接下來將比基準數大的數字放在右邊,比基準數小的數字放在左邊
while
(l!=r)
//之後在左邊尋找比key大的數
while
(arr[l]
<=key&&l
//注意為 <=,同上。
//當lif
(l < r)
}//當l==r時,基準數與arr[l]進行交換
arr[left]
= arr[l]
; arr[l]
= key;
//進行函式遞迴
第一次迴圈結束之後,left和right指向同一位置,此時數列的順序:
之後進行函式的遞迴呼叫!
最終快速排序實現!
《經典排序演算法 快速排序》
快速排序是實踐中已知的最快的排序演算法,平均執行時間o nlogn 該演算法之所以快是因為非常精煉和高度優化的內部迴圈。它也是一種分治的遞迴演算法,將陣列s排序的基本演算法由下列簡單的四步組成 如果s中元素個數是0或1,則返回。取s中任一元素v,稱之為樞紐元。將s 分成兩個不相交的集合s1 x v ...
經典排序演算法 快速排序
使用分割槽演算法並找出主元 對主元兩邊的序列分別進行排序 整體時間複雜度 o nlog n public class quicksort 分割槽演算法 public static intpartition int a,int l,int r else if a l a mid a l a r els...
經典演算法 快速排序
題目說明 快速排序是由東尼 霍爾所發展的一種排序演算法。在平均狀況下,排序n 個專案要 n log n 次比較。在最壞狀況下則需要 n2 次比較,但這種狀況並不常見。事實上,快速排序通常明顯比其他 n log n 演算法更快,因為它的內部迴圈 inner loop 可以在大部分的架構上很有效率地被實...