快速排序思想。
定义一个quick数组,下标0不用,两个指针low和high
quick[0]存贮哨兵上的数
假设以low关键字为哨兵。把这个数赋值到quick[0]
从最high开始依次向左一次减1,直到找到第一个小于quick[0]的数 将其赋值给quick[low]
这个时候quick[high]上的数是多余的,从low开始依次向右加1,直到找到第一个小于quick[0]的数
将其赋值给quick[high],这个时候quick[low]上的数是多余的.....
就这样重复计算 直到low==high 把quick[low]=quick[0],就完成了一次排序
之后递归调用就好啦
下面附上代码
#include <stdio.h>
#include <string.h>
int quick[100],n,t;
void quick_sort(int star,int end )
{
if(star>end)
return ;
int i=star,j=end;
quick[0]=quick[star];
while(i<j)
{
while(i<j&&quick[j]>=quick[0])
j--;
quick[i]=quick[j];
while(i<j&&quick[i]<quick[0])
i++;
if(i<j)
quick[j]=quick[i];
}
quick[i]=quick[0];
printf("第%d次排序结果:",t++);
for(int i=1;i<=n;i++)
printf("%d ",quick[i]);
printf("\n");
quick_sort(star,i-1);
quick_sort(i+1,end);
}
int main()
{
while(scanf("%d",&n)!=EOF)
{
t=1;
memset(quick,0,sizeof(quick));
for(int i=1;i<=n;i++)
scanf("%d",&quick[i]);
quick_sort(1,n);
}
return 0;
}