这是很多课本教材上的算法描述,主要是递归版本的。
#include<stdio.h>
//26/10/12 10:00
//一次划分
int one_partition(int a[],int i,int j)
{
int temp = a[i];
while(i<j){
while((i<j)&&(a[j]>temp))j--;//j左移
if(i<j){//printf("%d ",a[j]);
a[i] = a[j];
i++;
}
while((i<j)&&(a[i]<temp))i++;//i右移
if(i<j){//printf("%d ",a[i]);
a[j] = a[i];
j--;
}
}
a[i] = temp;
return i;
}
void quicksort(int a[],int s,int t)
{
if(s>=t)return ;
int k = one_partition(a,s,t);
quicksort(a,s,k-1);
quicksort(a,k+1,t);
}
int main(){
int a[10] = {5,9,8,7,2,6,1,0,3,4};
for(int i = 0;i<10;i++)
printf("%d ",a[i]);
printf("\n");
quicksort(a,0,9);
for(int i = 0;i<10;i++)
printf("%d ",a[i]);
getchar();
return 0;
}
示例结果: