假設有n個元素,現在要把這些元素按照從小到大的順序進行排序,那麼演算法步驟如下,
選擇中間位置的元素作為基準值(pivot value),其索引為( 0 + (n-1) ) / 2
從第0個元素開始從左往右找到比基準值大的元素,其索引為i從第n-1個元素開始從右往左找到比基準值小的元素,其索引為j交換這兩個元素
從索引i開始,繼續從左往右找到比基準值大的元素
從索引j開始,繼續從右往左找到比基準值小的元素
交換這2個元素
繼續查詢交換,直到i>j,即發生了相遇
根據i、j這2個索引,把元素分成兩部分,即[0,j]和[i, n-1],然後在這兩個部分裡繼續進行步驟1~8的操作
ps:基準值不一定要選擇中間位置的元素,可以選擇任意位置的元素
void
quicksort
(int arr,
int left,
int right)
}//對[left, j]做快速排序
if(left < j)
quicksort
(arr, left, j)
;//對[i, right]做快速排序
if(right > i)
quicksort
(arr, i, right)
;}
注釋:
快速排序使用了分而治之的思想,設計比較巧妙。理解的關鍵就是弄清從左到右和從右到左兩個方向的查詢和交換,以及這2個方向的相遇點。
快速排序演算法分析
快速排序演算法 include include void quicksort int arr,int nleft,int nright i nleft j nright int nmid nleft nright 2 int nmidval arr nmid while i j from right...
快速排序演算法分析
經常在面試時會有面試官要求直接寫出快速排序演算法,因為該演算法在排序演算法中占有非常重要的地位,它排序效率高,達到o nlogn 最壞的情況也是o n 2 它的思想為對於乙個待排序的序列,首先隨機選取乙個元素作為樞軸,然後通過元素值的比較,將整個序列分成兩部分,前一部分所有元素都小於或等於該樞軸元素...
快速排序演算法分析
include stdafx.h void qsort int a,int low,int high printf s 呼叫qsort開始 n int first low intlast high int key a first 用字表的第乙個記錄作為樞軸 intm 1 while first la...