求助快速排序
查看原帖
求助快速排序
159011
Umaru_楼主2023/4/14 21:02
void qsort(int L, int R) {
    int l = L, r = R;
    int rd=l+rand()%(r-l+1);
    swap(a[rd],a[r]);
    int poi=l-1;
    for(int i=l;i<r;++i){   
        if(a[i]<=a[r]){
            swap(a[++poi],a[i]);
        }
    }
    swap(a[++poi],a[r]);
    if(poi-1>L) qsort(L,poi-1);
    if(R>poi+1) qsort(poi+1,R);
}
void qsort(int L, int R) {
    int l = L, r = R;
    int tmp;
    int fla = a[l+rand()%(r-l+1)];
    while (l <= r) {
        while (a[l] < fla) ++l;
        while (a[r] > fla) --r;
        if (l <= r) {
            tmp = a[l]; a[l] = a[r]; a[r] = tmp;
            l++; r--;
        }
    }
    if (L < r) qsort(L, r);
    if (l < R) qsort(l, R);
}

为什么这两种快排效率差很多?第一个会T

2023/4/14 21:02
加载中...