void Qsort(int a[], int l, int r){
if(l >= r) return;
int flag = a[l], i = l, j = r;
while(i != j){
while(j > i && a[j] >= flag) j--;
swap(a[i], a[j]);
while(i < j && a[i] <= flag) i++;
swap(a[i], a[j]);
}
Qsort(a, l, i-1);
Qsort(a, i+1, r);
}
我想把它改得更简洁一点,改成了这样
void Qsort(int a[], int l, int r){
if(l >= r) return;
int flag = a[l], i = l, j = r;
while(i != j){
while(j > i && a[j--] >= flag);
swap(a[i], a[j]);
while(i < j && a[i++] <= flag);
swap(a[i], a[j]);
}
Qsort(a, l, i-1);
Qsort(a, i+1, r);
}
结果从原来的从小到大排序变成了从大到小排序,这是为什么啊。 完整代码如下
#include <cstdio>
using namespace std;
void swap(int &a, int &b){
int tmp = a; a = b; b = tmp;
}
void Qsort(int a[], int l, int r){
if(l >= r) return;
int flag = a[l], i = l, j = r;
while(i != j){
while(j > i && a[j] >= flag) j--;
swap(a[i], a[j]);
while(i < j && a[i] <= flag) i++;
swap(a[i], a[j]);
}
Qsort(a, l, i-1);
Qsort(a, i+1, r);
}
int a[100000];
int main(){
int n;
scanf("%d", &n);
for(int i = 0; i < n; i++)
scanf("%d", &a[i]);
Qsort(a, 0, n-1);
for(int i = 0; i < n; i++)
printf("%d ", a[i]);
return 0;
}
谢谢大家