#include<stdio.h>
#define MAXSIZE 20
void QuickSort(int a[],int lo,int hi);
int Partition(int a[],int lo,int hi);
void swap(int a[],int b,int c);
void Output(int a[],int n);
int main()
{
int n;//输入元素的个数
int a[MAXSIZE];
int i;
scanf("%d",&n);
for(i=0;i<n;i++){//输入n个元素
scanf("%d",&a[i]);
}
QuickSort(a,0,n-1);
Output(a,n);
return 0;
}
void QuickSort(int a[],int lo,int hi)
{
int i;
if(lo>=hi)return;
else{
i=Partition(a,lo,hi);
QuickSort(a,lo,i-1);
QuickSort(a,i+1,hi);
}
}
int Partition(int a[],int lo,int hi)
{
int i=lo,j=hi;
int tmp=a[lo];
while(i!=j){
while(i<j&&a[j]>=tmp)j--;
while(i<j&&a[i]<=tmp)i++;
swap(a,i,j);
}
swap(a,lo,i);
return i;
}
void swap(int a[],int b,int c)
{
int temp;
temp=a[b];
a[b]=a[c];
a[c]=temp;
}
void Output(int a[],int n)
{
int i;
for(i=0;i<n;i++){
printf("%d ",a[i]);
}
}
注意:i,j作为指针,是先让左指针先走;
在快排的实现代码中,将递归的技术融入了其中。
(1)递归实现的部分
void QuickSort(int a[],int lo,int hi)
{
int i;
if(lo>=hi)return;
else{
i=Partition(a,lo,hi);//大体上,第一步实现划分
QuickSort(a,lo,i-1);//第二步,左排序
QuickSort(a,i+1,hi);//第三步,右排序
}
}