j(从右)找到一个比基准数(记作k)小的数,然后让i(从左)找到一个比k大的数,然后进行交换。直到i,j相遇开始分治处理;
或者另一种是 基准数记作k,基准数下标记作x
① i(从左)找到一个比k大的数,a[x]=a[i];
② j(从右)找到一个比k小的数,a[i]=a[j];
③ i(从左)找到一个比k大的数,a[j]=a[i];
④ 重复②③直到i==j;
⑤ 将a[i]赋值为基准数k;
void quick_sort(int x,int y)
{
int i=x,j=y,t;//t用于稍后的交换
int k=a[x];
if(i>=j)
return;
while (i<j)
{
while((i<j)&&a[j]>=k)
j--;
t=a[i];
a[i]=a[j];
a[j]=t;
while((i<j)&&(a[i]<k))
i++;
t=a[i];
a[i]=a[j];
a[j]=t;
}
quick_sort(x,i-1);
quick_sort(i+1,y);
return;
}
void quicksort(int x,int y)
{
int i=x,j=y;
int k=a[x];
if(i>=j)
return;
while(i<j)
{
while(i<j&&a[j]>k)
j--;
if(i<j)
{
a[i]=a[j];
i++;
}
while(i<j&&a[i]<=k)
i++;
if(i<j)
{
a[j]=a[i];
j--;
}
}
a[i]=k;
quicksort(x,i-1);
quicksort(i+1,y);
}