快排序(递归算法)
#include<stdio.h>
#include<math.h>
#define N 10
void quicksort(int a[],int low,int high);
int split(int a[],int low,int high);
main()
{
int a[N],i;
printf("Enter %d numbers to be sorted: ",N);
for(i=0;i<N;i++)
{
scanf("%d",&a[i]);
}
quicksort(a,0,N-1);
printf("In sorted order: ");
for(i=0;i<N;i++)
{
printf("%d ",a[i]);
}
printf("\n");
getch();
}
void quicksort(int a[],int low,int high)
{
int middle;
if(low>=high)return;
middle=split(a,low,high);
quicksort(a,low,middle-1);
quicksort(a,middle+1,high);
}
int split(int a[],int low,int high)
{
int part_element=a[low];
for(;;){
while(low<high&&part_element<=a[high])
high--;
if(low>=high) break;
a[low++]=a[high];
while(low<high&&a[low]<=part_element)
low++;
if(low>=high) break;
a[high--]=a[low];
}
a[high]=part_element;
return high;
}
作者:cpoint
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.

浙公网安备 33010602011771号