#include<stdio.h>
int a[101],n;//定义两个全局变量这,两个都要在全局范围内使用
void quicksort(int ,int );
void quicksort(int left,int right)
{
//i,j作为哨兵,temp是基准数
int i,j,temp,t;
//考虑传递过来的参数出错的情况
if(left<right)
return ;
//传递过来的阐述正确的情况
temp=a[left];
//注意:这里的left初始的是1,而且我们定义的这个数组a是全局变量
//不然是不能用的
//下一步我们要对这个哨兵初始化
i=left;
j=right;
//这里分成了两种情况,如果出现a[i]>=temp还有a[j]<=temp的情况
//这连个就要停下来做交换
//如果这两个相遇了也要左交换
while(a[i] < temp && i<j )
i++;
while(a[j]>temp &&i<j)
j++;
//这个是没有相遇的时候他们停下来做的交换
if(i<j)
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
//下面的就是相遇了做的交换
//注意:前面已经有一步 temp=a[left];
a[left]=a[i];
a[i]=temp;
//注意我们的这个left是没有变化的,永远都是按照第一位为标准排序
//前面的 if(letf<right) return ;也是为了让这个结束,这里用了递归
quicksort(left,i-1);
quicksort(j+1,right);
}
int main(void)
{
int i,
j;
scanf("%d",&n);
//我们要存入n个数,我们初始i=1的原因是方便我们认为的习惯
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
quicksort(i,n);
for(int i=1;i<=n;i++)
printf("%d ",a[i]);
return 0;
1
}
//最后想说的是,定义一个数组的小标,如果开始的时候使用0;那么很有可能会让我们不适应,所以我们可以多定义一个数组,让长度加1,我们从第二个小标1开始使用
//代码参考的是啊哈算法这本数