如图,都是快排模板,但为什么第二个正常,第一个就只输出乱码呢?
#include<iostream> //左
using namespace std;
int a[100010],n;
void qui(int a[],int l,int r){
if(r<=l) return;
int i=l,j=r,mid=a[(l+j)/2];
while(i<j){
while(a[i]<mid) i++;
while(a[j]>mid) j--;
if(i<=j){
swap(a[i],a[j]);
i++;
j--;
}
}
qui(a,l,j);
qui(a,i,r);
}
int main(){
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
}
qui(a,0,n-1);
for(int i=0;i<n;i++){
printf("%d ",a[i]);
}
printf("\n");
return 0;
}
#include<iostream> //右
using namespace std;
int a[100010];
void qui (int a[],int l,int r){
int flag = a[(l + r)/2],i = l,j = r;
while (i <= j){
while (a[i] < flag) i++;
while (a[j] > flag) j--;
if (i <= j) {
swap(a[j], a[i]);
i++;j--;
}
}
if (j > l) qui(a, l, j);
if (i < r) qui(a, i, r);
}
int main (){
int nn;
cin >> nn;
for(int i = 0; i < nn; i++) {
cin >> a[i];
}
qui(a, 0, nn-1);
for(int i=0; i < nn; i++) {
cout << a[i] << ' ';
}
}