求问两个代码只有二分的时候有区别,但是后一个能AC前一个会有3个点都WA。实在不知道两个有啥区别
#include<iostream>
using namespace std;
int a[100001];
void sort(int l,int r){
int i=l,j=r;
int mid=(l+r)/2;//只有这里不一样,先把中间位置下标拿出来的这种写法就过不了
while(i<=j){
while(a[i]<a[mid])i++;//这里
while(a[j]>a[mid])j--;//这里
if(i<=j){
swap(a[i],a[j]);
i++;
j--;
}
}
if(l<j)sort(l,j);
if(i<r)sort(i,r);
}
int main(){
int n;
cin>>n;
for(int i=0;i<n;i++)cin>>a[i];
sort(0,n-1);
for(int i=0;i<n;i++)cout<<a[i]<<' ';
return 0;
}
#include<iostream>
using namespace std;
int a[100001];
void sort(int l,int r){
int i=l,j=r;
int mid=a[(l+r)/2];//这个直接把中间值取出来就能过
while(i<=j){
while(a[i]<mid)i++;
while(a[j]>mid)j--;
if(i<=j){
swap(a[i],a[j]);
i++;
j--;
}
}
if(l<j)sort(l,j);
if(i<r)sort(i,r);
}
int main(){
int n;
cin>>n;
for(int i=0;i<n;i++)cin>>a[i];
sort(0,n-1);
for(int i=0;i<n;i++)cout<<a[i]<<' ';
return 0;
}