数据生成器:
#include<bits/stdc++.h>
using namespace std;
const int N=100005;
int n,a[N],b[N];
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++) a[i]=i;
for(int i=1;i<=n;i++){
b[a[i+n>>1]]=i;
swap(a[i],a[i+n>>1]);
}
printf("%d\n",n);
for(int i=1;i<=n;i++) printf("%d ",b[i]);
return 0;
}
类似的,不管你怎样选哨兵。只要不是随机的,被造数据者暗算了可就完了。所以,快排规则千万条,随机哨兵第一条!
注:不用 sort 是因为手写快排速度可以达到 sort 的两倍以上,可用于卡常。