排序
不用\(sort\)了吧\(QWQ\)
归并排序
void ssort(int l,int mid,int r){
int tmp[MAXN];memset(tmp,0,sizeof tmp);
int i=l;int j=mid+1;int k=0;
while(i<=mid&&j<=r){
if(a[i]<=a[j])tmp[k++]=a[i++];
else tmp[k++]=a[j++],cnt+=mid-i+1;//顺便求个逆序对
}
while(i<=mid)tmp[k++]=a[i++];
while(j<=r)tmp[k++]=a[j++];
for(int p=0;p<k;p++)a[l+p]=tmp[p];
}
void qsort(int l,int r){
if(l>=r)return;
int mid=(l+r)>>1;
qsort(l,mid);
qsort(mid+1,r);
ssort(l,mid,r);
}//qsort(1,n);注意与函数sort的右边界区分
快速排序
bool cmp(int x,int y){return x<y;}
void qsort(int l,int r){
int i=l,j=r;int mid=a[i+j>>1];
while(i<=j){
while(cmp(a[i],mid))i++;
while(cmp(mid,a[j]))j--;
if(i<=j){
int t=a[i];a[i]=a[j];a[j]=t;
i++;j--;
}
}
if(i<r)qsort(i,r);
if(l<j)qsort(l,j);
}//qsort(1,n);注意与函数sort的右边界区分
qwqwqwq