快排模板

发布时间 2023-04-22 23:25:27作者: 凪风sama
void quick_sort(int* Num, int L, int R)
{
    if (L >= R)return;
    swap(Num[L], Num[L + R >> 1]);
    int i = L; int j = R;
    int Temp = Num[L];
    while (i < j)
    {
            for (; Num[j] >= Temp&&i<j; j--);
            for (; Num[i] <= Temp&&i<j; i++);
            swap(Num[i], Num[j]);
    }
    swap(Num[i], Num[L]);
    quick_sort(Num, L, i -1);
    quick_sort(Num, i + 1, R);
}

非常的精简,非常的美味

附加三元取中的模板方法

int Get_pivot(int *Num,int L,int R)
{
    int mid = (L + R) / 2;
    if (Num[L] > Num[R])
        swap(Num[L], Num[R]);//确保最左边大于最右边
    if (Num[R] > Num[mid])
        swap(Num[R], Num[mid]);
    if (Num[L] > Num[mid])
        swap(Num[L], Num[mid]);
三轮过后会使得中间值交换到mid位置
return mid; }