zoukankan      html  css  js  c++  java
  • 快速排序

    直接上代码:

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

  • 相关阅读:
    vue父子组件通信
    canvas(一)
    js中的this
    git中遇到的问题
    javaScript中各种数据结构的遍历
    git合并多个提交
    vue学习笔记(三)——vuex—store配置
    vue学习笔记(二)——路由配置
    0欧电阻的作用
    STM32L系列单片机内部EEPROM的读写
  • 原文地址:https://www.cnblogs.com/gattaca/p/7819481.html
Copyright © 2011-2022 走看看