快速排序

Posted Sawyer Ford

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了快速排序相关的知识,希望对你有一定的参考价值。

直接上代码:

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元素的选择,值得研究。

以上是关于快速排序的主要内容,如果未能解决你的问题,请参考以下文章

算法排序之堆排序

前端开发工具vscode如何快速生成代码片段

前端开发工具vscode如何快速生成代码片段

如何使用sublime代码片段快速输入PHP头部版本声明

代码片段如何使用CSS来快速定义多彩光标

vs2003:快速片段工具