基本思路:
1.先從數列中找到一個數作爲基數。
2.在分區過程中找到比基數大的數放在基數右邊,小的數放在分區左邊。
3.再對左右兩個區間繼續二過程,直到該區間只有一個數。
具體實現:
1.令i=L,j=R,選出一個數作爲基數,存在x中。
2.從後往前(j--)找比x小的數,找到後填入空位。
3.再從前往後(i++)找比x大的數,找到後填入空位。
4.直到i==j,將x填入最後一個空位。
5.繼續對左右分開的的兩個區間重複以上排序過程
void quick_sort(int *s,int l,int r)
{
if(l<r)
{
int i=l,j=r,x=s[l];//x作爲基數
while(i<j)
{
while(i<j&&s[j]>=x)//從後往前查找比x小的數
j--;
if(i<j) s[i++]=s[j];//滿足條件,插入空位
while(i<j&&s[i]<x)//從前往後查找比x大的數
i++;
if(i<j) s[j--]=s[i];//滿足條件,插入空位
}
s[i]=x;//基數x進入空位。
quick_sort(s,l,i-1);//分治
quick_sort(s,i+1,r);
}
}