这是什么回事?、
我兴致勃勃的敲了遍快排结果没过。
我看了看我以前写的快排,我只想问这有区别吗?为什么会WA
AC代码
#include<bits/stdc++.h>
#define MAXN 10000005
using namespace std;
int a[MAXN],n;
inline void Quick_read(int &x){//快读
int f = 1; x = 0 ; char ch = getchar();
while((ch<'0'||ch>'9') && ch!='-') ch = getchar();
if(ch == '-') f = -1,ch = getchar();
while(ch>='0' && ch<='9') x = x*10+ch-'0',ch = getchar();
x *= f;
}
inline void Quick_print(int x){//快输
if(x < 0) putchar('-'),x = -x;
if(x > 9) Quick_print(x/10);
putchar(x%10+'0');
}
inline void p(){putchar(' ');}//输出空格
void Quick_sort(int a[],int l,int r){//快排
if(l >= r) return ;
int mid = a[l + r >>1 ];
int i = l , j = r ;
while(i <= j){
while(a[i] < mid) i++;
while(a[j] > mid) j--;//不能取等
if(i <= j){
swap(a[i],a[j]);
i++;j--;
}
}
Quick_sort(a,l,j);
Quick_sort(a,i,r);
}
int main(){
Quick_read(n);
for(int i=1; i<= n ; i++)Quick_read(a[i]);
Quick_sort(a,0,n);
for(int i=1; i<=n ; i++ )Quick_print(a[i]),p();
return 0;
}
垃圾代码:
#include<bits/stdc++.h>
#define MAXN 1000050
using namespace std;
int n,a[MAXN];
void quick_sort(int a[],int l,int r ){
if(l >= r) return ;
int mid = l + r >>1 ;
int i = l , j = r ;
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--;
}
}
quick_sort(a,l,j);
quick_sort(a,i,r);
}
int main(){
scanf("%d",&n);
for(int i = 1; i <= n; i++) scanf("%d",&a[i]);
quick_sort(a,0,n);
for(int i = 1; i <= n; i++) printf("%d ",a[i]);
return 0;
}