快速排序對給定陣列中的元素 進行重新排列,以得到乙個快速排序的分割槽,在一 個分割槽中,所有在s下標之前的元素都小於等於a[s],所有在s下標之後的元素都大於等於a[s],即a[s]已經位於它在有序陣列中的最終 位置。
1.首先選擇乙個元素為中軸,一般選擇為第乙個元素, a[l]
2.建立分割槽:分別掃瞄與中軸比較,一次從左到右(用i表示)直到遇到第乙個大於中軸的元素,另一次從右到左(用j表示)直到遇到第乙個小於等於中軸的元素
3.兩次掃瞄全部停止會發生3種不同的情況
1)掃瞄指標i,j不相交,即i2)掃瞄指標相交, 即i>j,把中軸和a[j]交換以後,得到該陣列的乙個分割槽
jp全部
全部3)掃瞄指標指向同乙個元素,也就是i=j,被指向的元素一定等於p,建立該陣列的乙個分割槽,**點的 位置s=i=j。
=jp全部
=p全部
合併後兩種情況,只要i
注意:在這種形式下,下標i可能會超過子陣列的邊界
如果所有的**點位於相應子陣列的中點,就是最優情況,鍵值的比較次數:
在最差情況下,所有的**點都趨於極端:兩個子陣列有乙個為空,而另乙個子陣列僅僅被分割槽陣列少一
個元素,這會在已 排好序的情況下出現,鍵值的比較次數:
因此在平均情況下,僅比最優情況下多執行38%的比較操作,其最內 層迴圈效率非常高,使得在處理隨機排列的陣列時,速度要比合併排序快。
void quicksort(int a,int l,int r)
while(i
i++;
if (i
} a[i]=key;
quicksort(a,l,i-1);
quicksort(a,i+1,r);
} return;
}
《經典排序演算法 快速排序》
快速排序是實踐中已知的最快的排序演算法,平均執行時間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 可以在大部分的架構上很有效率地被實...