代码如下:
/*******************************
*程序功能:快速排序(分治法排序)
*时间:2019年11月14日
*******************************/
#include<stdio.h>
#define N 6
int quick_short(int *a,int low,int high)
{
int i=low,j=high,key=0;
//递归函数的结束条件
if(low>=high)
{
return 0;
}
//key元素可以是任意的
//我们不妨选第一个元素
key = a[i];
while(low<=high)
{
//右侧比较,如果还是大于,往前搜索
//交换数据后换另外一侧的前进一个开始比较
while(low<high && key<a[high])
{
high--;
}
if(key>=a[high])
{
exchange(&a[low],&a[high]);
low++;
}
while(low<high && key>a[low])
{
low++;
}
if(key<=a[low])
{
exchange(&a[low],&a[high]);
high--;
}
}
printf("low:%d ",low);
printf("high:%d \n",high);
//每次的key元素排好后已经中立
//不要再参与排序,否则就乱了
quick_short(a,i,low-1);//递归排左侧
quick_short(a,high+1,j);//递归排右侧
}
//交换函数
int exchange(int *low,int *high)
{
int temp;
temp = *low;
*low = *high;
*high = temp;
return 0;
}
//打印函数
int show(int *a)
{
int i;
for(i=0;i<N;i++)
{
printf("%d ",a[i]);
}
putchar(10);
return 0;
}
//主函数
int main(int argc, const char *argv[])
{
int a[N]={4545,-4,122,45645,721,647};
quick_short(a,0,N-1);
show(a);
return 0;
}
结束。