快排序(递归算法)

#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
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
原文地址:https://www.cnblogs.com/cpoint/p/1900291.html