快排思想O(N)求第k大數

nannandbk發表於2024-11-29

快排思想O(N)求第k大數

int quicksort(int l,int r,int k)
{
    int midv = a[(l+r)>>1];
    int i = l,j = r;
    while(i <= j)
    {
        while(a[i] < midv)i++;
        while(a[j] > midv)j--;
        if(i <= j)
        {
            swap(a[i],a[j]);
            i++;
            j--;
        }
    }
    if(l <= j && k <= j) return quicksort(l,j,k);
    if(i <= r && k >= i) return quicksort(i,r,k);
    return a[k];
}

相關文章