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

    
    class QuickSort {
    
    public:
    
        void sort(int * arr, int size);
    
    private:
        int partition(int * arr, int start, int end);
    
        void quickSort(int *arr, int start, int end);
    };
    
    
    
    #include "QuickSort.h"
    #include <iostream>
    
    void QuickSort::sort(int *arr, int size) {
        if(size <= 1){
            return;
        }
        quickSort(arr, 0, size - 1);
    
    }
    
    
    /**
     * 这里的end和mergeSort的end不一样,这里的end,是最后一个序列的序号,是包含的
     * @param arr
     * @param start
     * @param end
     */
    void QuickSort::quickSort(int *arr, int start, int end) {
    
        if (start >= end){
            return;
        }
    
        int pivot = partition(arr, start, end);
        /**
         * 这里必须把pivot剔除掉,一方面pivot已经在正确的位置上了,另一方面有可能死循环(中间点的正确位置是两边,就会进入无限递归)
         */
        quickSort(arr, start, pivot -1);
        quickSort(arr, pivot + 1, end);
    }
    
    int QuickSort::partition(int *arr, int start, int end) {
        int p = end;
        int less = start;
        for (int i = start; i < p; ++i) {
            if(arr[i] < arr[p]){
                std::swap(arr[i], arr[less]);
                ++less;
            }
        }
        std::swap(arr[less], arr[p]);
        return less;
    
    }
    
    
    
  • 相关阅读:
    StringBuffer与Stringbuilder
    String与其他类型的转换
    创建多进程的方法
    8.进程
    克隆虚拟机
    初探12306售票算法(二)-java代码实践
    初探12306售票算法(一)- 理论
    手机上mcd程序耗电异常问题相关
    vue版app上下拉加载
    css基础
  • 原文地址:https://www.cnblogs.com/IC1101/p/13609402.html
Copyright © 2011-2022 走看看