快速排序以及我个人的理解

#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开始使用
//代码参考的是啊哈算法这本数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值