#include <stdio.h>
int a[101],n;
//定义全局变量,这两个变量需要在子函数中使用
void quicksort(int left,int right)
{
int i,j,t,temp;
if(left>right)
return;
//这样做的目的是保证以左侧数字为参考值,不满足的情况直接跳出方法
temp=a[left];
//temp中存的就是基准数
i=left;
j=right;
//快排链式表的初始化
while(i!=j)
{
//顺序很重要,要先从右往左找
while(a[j]>=temp && i<j)
j--;
//再从左往右找
while(a[i]<=temp && i<j)
i++;
//交换两个数在数组中的位置
if(i<j)
//当哨兵i和哨兵j 没有相遇时
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
a[left]=a[i];
a[i]=temp;
//这一步是互换两个参数
quicksort(left,i-1);
//继续处理左边的,这里是一个递归的过程
quicksort(i+1,right);
//继续处理右边的,这里是一个递归的过程}
int main()
{
int i,j;
//读入数据
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
quicksort(1,n);
//快速排序调用
//输出排序后的结果
for(i=1;i<=n;i++)
printf("%d ",a[i]);
getchar();getchar();
return 0;
}
易错点:
for(i=0;i<n;i++)
scanf("%d",&a[i]);
quicksort(1,n);
for(i=0;i<n;i++)
printf("%d ",a[i]);
这里虽然i的取值范围不变,但是启示代码出现了0,会出现错误,具体表现在第二个数字为0,排序出错。注意上面有i-1操作,会出现负值。
转载于:https://my.oschina.net/u/2312175/blog/653883