欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

快速排序个人详细解读

程序员文章站 2022-03-16 19:03:41
...

#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;

}
//最后想说的是,定义一个数组的小标,如果开始的时候使用0;那么很有可能会让我们不适应,所以我们可以多定义一个数组,让长度加1,我们从第二个小标1开始使用
//代码参考的是啊哈算法这本数