快排序(递归算法)

#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;
}
原文地址:https://www.cnblogs.com/xueda120/p/3068208.html