快速排序

直接上代码:

void InsertSort(int *array, int n)
{
    int tmp;
    int j;
    for (int p = 1; p < n; p++) {
        tmp = array[p];
        for (j = p; j > 0 && array[j - 1] > tmp; j--) {
            array[j] = array[j - 1];
        }
        array[j] = tmp;
    }
}

int Median3(int *array, int left, int right)
{
    int middle = (left + right) / 2;
    
    if (array[left] > array[middle])
        std::swap(array[left], array[middle]);
    if (array[left] > array[right])
        std::swap(array[left], array[right]);
    if (array[middle] > array[right])
        std::swap(array[middle], array[right]);
    
    std::swap(array[middle], array[right - 1]);
    return array[right - 1];
}

void Qsort(int *array, int left, int right)
{
    if (left + 3 <= right) {
        int pivot = Median3(array, left, right);
        int i = left;
        int j = right - 1;
        for (; ;) {
            while (array[++i] < pivot)
                ;
            while (array[--j] > pivot)
                ;
            if (i < j)
                std::swap(array[i], array[j]);
            else
                break;
        }
        std::swap(array[i], array[right - 1]);
        
        Qsort(array, left, i - 1);
        Qsort(array, i + 1, right);
    } else {
        InsertSort(array + left, right - left + 1);
    }
}

void QuickSort(int *array, int n)
{
    Qsort(array, 0, n - 1);
}

pivot元素的选择,值得研究。

转载于:https://www.cnblogs.com/gattaca/p/7819481.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值