思路:
定义一个基准值(以他为标准进行比较),将其拿出来,然后把所有比他大的都放在他右侧,小的放左侧,下图关键点+1是有原因的,
你想,我们平时快排肯定high,那么这里最终也一定要实现成high的,不然就越界,
因此我们可以联想到do…while语句,即先减掉1再说,这就实现到high了
#include <stdio.h>
#include <stdlib.h>
int a[100010];
void Qsort(int arr[], int low, int high){
if (high <= low) return;
int i = low;
int j = high + 1;//关键
int key = arr[low];
while (true)
{
do
{
j--;
}while(key<=arr[j]&&j>i);
do
{
i++;
} while(key>=arr[i]&&j>i);
if(i>=j)break;
int temp1 = arr[i];
arr[i] = arr[j];
arr[j] = temp1;
}
int temp = arr[low];
arr[low] = arr[j];
arr[j] = temp;
Qsort(arr, low, j - 1);
Qsort(arr, j + 1, high);
}
int main()
{
int i, T;
scanf("%d", &T);
for(i=0; i<T; i++) scanf("%d", &a[i]);
Qsort(a, 0, T-1);
for(int i = 0; i < T; i++)
printf("%d ", a[i]);
return 0;
}