#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("\n");
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; //返回枢轴元素的位置
}