#include<stdio.h>
#include<stdlib.h>
void
change(int
*pa,
int *pb)//根据地址交换两个变量的值
{
int
temp = *pa;
*pa = *pb;
*pb =
temp;
}
show(int
*p,
n)//显示数组状态
printf("\n此时此刻数组的状态");
for (int
i = 0;
i <
n;
i++)
printf("%5d",
p[i]);//*(p+i)
void
quicksort(int
left,
right)
printf("\n要处理的子序列
");
i =
left;
i <=
right;
i++)//从左到右打印要处理子序列
p[i]);
left;//a[0]
//最左边的数
j =
right + 1;//a[10]
最右边的数
if (i
< j)//循环的可用条件
do
i++;
} while (p[i]<p[left]
&& i <=
right);//统计多少个小于它的数,p[i]就是最右边小于第一个数的数
j--;
} while (p[j]
>= p[left]
&& j>left);//统计下标最左边大于第一个数的数
printf("\na[%d]=%d,a[%d]=%d",
i,
p[i],
j,
p[j]);//打印中间数据
< j)
change(&p[i],
&p[j]);
show(p,
10);
} while (i
< j);///j作为分割点
小于的数往左,大于的数往右
change(&p[left],
&p[j]);//以j作为分割点
printf("\np[%d]=%d",
p[j]);
10);//
quicksort(p,
j - 1);//分割左边
j + 1,
right);//分割右边
main()
a[10] = { 19, 9, 20, 8, 38, 49, 11, 58, 34, 22 };
show(a,
10);//显示数组没有排序的状态
quicksort(a,
0, 10 - 1);
system("pause");