数据结构-快速排序

#include <stdio.h>
#define N 8

void quicksort(int a[],int m,int n);
int quickpass(int a[],int left,int right);
int main()
{
    int i,m,n;
    int a[N]={48,63,35,76,54,12,35,88};
    m=0;     
    n=N-1;
    quicksort(a,m,n);
    for(i=0;i<N;i++)  //排序后的数据
       printf("%d ",a[i]);
    printf("
");
    return 0;
}

void quicksort(int a[],int m,int n) 
//参数m表示每个子表的第一个元素,n表示每个子表的最后一个元素
{
    int p;
    if(m < n)
    {
    p=quickpass(a,m,n); //调用一趟快速排序,寻找枢轴,以轴元素为界限将数组划分成两个子表。
    quicksort(a,m,p-1); //对左部子表快速排序
    quicksort(a,p+1,n); //对右部子表快速排序
    }
}
int quickpass(int a[],int left,int right)
{
    int x,low,high;
    x=a[left];  //记录枢轴元素
    low=left;
    high=right;
    while(low < high)
    {
     while(low < high && a[high] >= x)   high--;
    //high从右向左找小于x的元素    
     if(low < high)//找到小于x的记录则进行交换。
     {a[low] = a[high];low++;}

     while(low < high && a[low] < x) low++;
   //low从左向右找大于x的元素    
     if(low < high)//找到大于x的记录则进行交换。
     {a[high]=a[low];high--;}

    }
    a[low]=x;   //将枢轴元素保存到low=high的位置
    return low; //返回枢轴元素的位置
}
原文地址:https://www.cnblogs.com/songxxu/p/3389178.html