#include<stdio.h>
void print(int a[],int n) //输出
{
for(int j=0;j<n;j++)
printf("%5d",a[j]);
printf("\n");
}
void swap(int *a,int *b) //交换
{
int tmp=*a;
*a=*b;
*b=tmp;
}
int partition(int a[],int low,int high)
{
int privotkey =a[low]; //基准元素
while(low<high) //从表两端交替地向中间扫描
{
while(low<high && a[high]>=privotkey) //从high所指位置向前搜索,至多到low+1,将比基准元素小的交换到低端
--high;
swap(&a[low],&a[high]);
while(low<high && a[low]<=privotkey)
++low;
swap(&a[low],&a[high]);
}
print(a,10);
return low;
}
void quicksort(int a[],int low,int high)
{
if(low<high)
if(low<high)
{
int privotloc=partition(a,low,high); //将表一分为二
quicksort(a,low,privotloc-1); //递归对低子表递归排序
quicksort(a,privotloc+1,high); //递归对高子表递归排序
}
}
int main(void)
{
int a[10]={3,2,5,8,4,7,6,9,0,1};
printf("初始值:");
print(a,10);
quicksort(a,0,9);
printf("结果:");
print(a,10);
}
void print(int a[],int n) //输出
{
for(int j=0;j<n;j++)
printf("%5d",a[j]);
printf("\n");
}
void swap(int *a,int *b) //交换
{
int tmp=*a;
*a=*b;
*b=tmp;
}
int partition(int a[],int low,int high)
{
int privotkey =a[low]; //基准元素
while(low<high) //从表两端交替地向中间扫描
{
while(low<high && a[high]>=privotkey) //从high所指位置向前搜索,至多到low+1,将比基准元素小的交换到低端
--high;
swap(&a[low],&a[high]);
while(low<high && a[low]<=privotkey)
++low;
swap(&a[low],&a[high]);
}
print(a,10);
return low;
}
void quicksort(int a[],int low,int high)
{
if(low<high)
if(low<high)
{
int privotloc=partition(a,low,high); //将表一分为二
quicksort(a,low,privotloc-1); //递归对低子表递归排序
quicksort(a,privotloc+1,high); //递归对高子表递归排序
}
}
int main(void)
{
int a[10]={3,2,5,8,4,7,6,9,0,1};
printf("初始值:");
print(a,10);
quicksort(a,0,9);
printf("结果:");
print(a,10);
}