递归
void quickSort(int *a,int low,int high)
{
if(low<high)
{
int p = partition(a,low,high);//确定一个值的位置并得到这个位置
quickSort(a,low,p-1);//递归排序左部分
quickSort(a,p+1,high);//递归排序右部分
}
}
确定一个数的最终位置
三个循环,每个循环都要有low<high。先从右向左,再从左向右。
int partition(int *a,int low,int high)
{
int flag = a[low];//最左值取出,这一趟就确定这个值的位置
while(low<high)
{
while(low<high&&a[high]>=flag)//先从右向左
{
high--;
}
a[low]=a[high];//第一个比flag小的值放到左面
while(low<high&&a[low]<=flag)//再从左向右
{
low++;
}
a[high]=a[low];//第一个比flag大的值放到右面
}
a[low] = flag;//flag放到最终的位置
return low;
}
主函数
int main()
{
int a[10] = {3,5,2,8,1,4,6,3,1,9};
quickSort(a,0,9);
int i;
for(i=0;i<10;i++)
{
printf("%-5d",a[i]);
}
return 0;
}