参考资源:《啊哈!算法》
#include <stdio.h>
void quickSort(int *arr,int left, int right)
{
if(left>right)//跳出递归的条件
return;
int i,j,temp;
temp=arr[left];//选取第一个数为基数
i=left;
j=right;
while (i!=j) {
//从右边开始寻找 比基数小的数
while (arr[j]>=temp&&i<j) {
j--;
}
//从左往右寻找 比基数大的数
while (arr[i]<=temp&&i<j) {
i++;
}
if(i<j)//左右哨兵没有相遇
{
arr[j]=arr[i]+arr[j];
arr[i]=arr[j]-arr[i];
arr[j]=arr[j]-arr[i];
}
}
//返回基准位置
arr[left]=arr[i];
arr[i]=temp;
quickSort(arr,left,i-1);
quickSort(arr,i+1,right);
}
int main(int argc, char *argv[])
{
int i ,j,n;
scanf("%d",&n);
int a[n];
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
quickSort(a,1,n);
for(i=1;i<=n;i++)
{
printf("%d\t",a[i]);
}
return 0;
}