基本思想:
对输入的子数组list[p:r],找到一个基准数list[q],将数组list[p:r]分成三部分:
list [p:q-1]、list[q] 和 list[q+1:r]。list[p:q-1]中所有元素均小于等于list[q],list[q+1:r]中所有元素均大于等于list[q]。然后 对list[p:q-1] 和 list[q+1:r] 进行递归运算即可。
对输入的子数组list[p:r],找到一个基准数list[q],将数组list[p:r]分成三部分:
list [p:q-1]、list[q] 和 list[q+1:r]。list[p:q-1]中所有元素均小于等于list[q],list[q+1:r]中所有元素均大于等于list[q]。然后 对list[p:q-1] 和 list[q+1:r] 进行递归运算即可。
//
关键程序如下:
int partition( int list[], int p, int r)
{
int i=p, j=r+1;
int temp, a=list[p];
while(1){
while(list[++i]<a);
while(list[--j]>a);
if(i>=j) break;
temp=list[i];
list[i]=list[j];
list[j]=temp;
}
list[p]=list[j]; // must be j, not i
list[j]=a;
return j;
}
void quickSort( int list[], int l, int r)
{
if(l>=r) return;
int n=partition(list, l, r);
quickSort(list, l, n-1);
quickSort(list, n+1, r);
}
int partition( int list[], int p, int r)
{
int i=p, j=r+1;
int temp, a=list[p];
while(1){
while(list[++i]<a);
while(list[--j]>a);
if(i>=j) break;
temp=list[i];
list[i]=list[j];
list[j]=temp;
}
list[p]=list[j]; // must be j, not i
list[j]=a;
return j;
}
void quickSort( int list[], int l, int r)
{
if(l>=r) return;
int n=partition(list, l, r);
quickSort(list, l, n-1);
quickSort(list, n+1, r);
}