概念:每次排序的时候设置一个基准点,将小于基准点的数放在基准点的左边,大于基准点的数放在基准点的右边,使得交换的距离变大。
#include<stdio.h>
int a[100];//全局变量
int n;//要读取数的个数
void quicksort(int left,int right) {
int i,j,t,temp;
if(left>right) {
return;
}
temp=a[left];//基准数
i=left;
j=right;
while(i!=j) {
//从右往左找
while(a[j]>=temp&&i<j) {
j--;
}
//从左往右找
while(a[i]<=temp&&i<j) {
i++;
}
if(i<j) { //不符合则换位置
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
//第一位即基准位与中间位置互换(每一次寻找的最后一次交换)。
a[left]=a[i];
a[i]=temp;
//递归处理左侧和右侧
quicksort(left,i-1);
quicksort(i+1,right);
return;
}
int main() {
scanf("%d",&n);
for(int i=1; i<=n; i++) {
scanf("%d",&a[i]);
}
quicksort(1,n);
for(int i = 1;i<=n;i++)
{
printf("%d ",a[i]);
}
return 0;
}