快速排序是在未排序陣列中找乙個基準(最左邊的數),將所有比基準數小的數放在基準數左邊,大的數放在基準數右邊。最後在基準數左邊用同樣的方法,右邊用同樣的方法直到為順序集合
演算法流程:
遞迴引數:左,右邊界
終止條件:左邊界大於右邊界
單次過程:
以左邊界為基準點以左邊界為左指標起始點,右邊界為右指標起始點
先移動右指標,直到找到比基準點小或者遇到左指標停止
移動左指標,直到找到比基準點大或者遇到右指標停止
如果左右指標未相遇,則交換左右指標的兩個數
以此類推直到左右指標相遇
交換基準點和此時的左右指標所指的值,完成區域性排序
#include
using namespace std;
int a[
101]
,n;//待排序數
void
quicksort
(int left,
int right)
;int
main()
quicksort(1
,n);
for(
int i=
1;i<=n;i++
)return0;
}void
quicksort
(int left,
int right)
//temp為選定基準
int temp = a[left]
;int i = left;
int j = right;
int t;
while
(i!=j)
//移動左指標,直到找到比基準大
while
(i<=temp)
//兩指標未相遇時交換
if(i}//將最終相遇點與基準交換
a[left]
= a[i]
; a[i]
= temp;
//繼續往左塊和右塊排序,直到最終為順序集合
quicksort
(left,i-1)
;quicksort
(i+1
,right)
;}
void
quick_sort
(int q,
int l,
int r)
quick_sort
(q,l,j)
;quick_sort
(q,j +
1,r)
;}
排序 快速排序模板
以某個記錄 元素 為界 該記錄稱為支點或樞軸 將待排序列分成兩部分 一部分 所有記錄的關鍵字大於等於支點記錄的關鍵字 另一部分 所有記錄的關鍵字小於支點記錄的關鍵字 演算法描述 1 任取待排序記錄序列中的某個記錄 例如取第乙個記錄 作為基準 樞 按照該記錄的關鍵字大小,將整個記錄序列劃分為左右兩個子...
快速排序 模板
說明 經過本函式處理後,陣列itemarray中元素滿足prulefunc itemarray itemr itemarray iteml 為true,其中itemr iteml template t void quicksort itemarray,int iteml,int itemr,bool...
模板 快速排序
排序演算法可以說是從語言步入演算法的第一道坎了,其中最有代表性的莫過於快排。這裡模擬庫函式自帶sort的呼叫方式,寫起來相當自然清爽。樸素快速排序演算法的複雜度最好為o nlogn 最壞時能達到o n include include include include include include d...