• 快速排序


    直接上代码:

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

  • 相关阅读:
    Odoo Entypo Regular Icon List
    Ubuntu 循环遍历当前目录下所有文本文件中的字符
    FairyGUI学习
    FairyGUI和NGUI对比
    热更新有多重要?游戏代码热更新杂谈
    收藏的链接
    Vuforia AR实战教程
    BleedTree动画混合树
    Unity3d导出安卓版本
    Unity+高通Vuforia SDK——AR
  • 原文地址:https://www.cnblogs.com/gattaca/p/7819481.html
Copyright © 2020-2023  润新知