排序

不用(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的右边界区分 
原文地址:https://www.cnblogs.com/erutsiom/p/9919278.html