快速排序

对一个下标在 [l,r][l,r] 间的数组 aa 排序。

一般可以这么调用:ksort(a,1,n),把 a1na_{1\sim n} 排好序。

void ksort(int *a,int l,int r){
    int i=l,j=r,f=a[(l+r)/2];
    do{
        while(a[i]<f)
			i++;
        while(a[j]>f)
			j--;
        if(i<=j)
			swap(a[i++],a[j--]);
    }while(i<=j);
    if(l<j)
		ksort(a,l,j);
    if(i<r)
		ksort(a,i,r);
}

平均时间复杂度 O(nlogn)O(n\log n)

posted @ 2021-08-28 23:30  luckydrawbox  阅读(8)  评论(0)    收藏  举报  来源