10大排序算法之【快速排序】

作者: 编码的哲哲 | 来源:发表于2016-10-20 09:34 被阅读38次

    我的信仰是自由,而快速排序淋漓尽致的体现了这点,加之我最喜欢的编程语言javascript内置的sort算法也是快排,所以毫无疑问,我最钟爱的排序算法就是快速排序了。
    总的来说,快排可以分为两类,一类是交换快排,即从左边找到一个大于middle的数,在从右边找到一个小于等于middle的数,然后交换,递归继续。一类是赋值快排,即先将第一个数抽出来【我通常这么做】赋值给middle,在从右向左找到一个小于middle的直接赋值给i,然后从i开始从左向右找一个大于等于middle的数直接赋值给j,这样当i=j的时候把middle复制给list[i]就完成了,,,然后开始递归。。。。
    下面的代码是赋值排序实现,有种飘逸灵动的感觉。。

    include<iostream>

    include<vector>

    using namespace std;

    class QuickSort{

    private:
        int len;
        vector<int> list;
    public:
        QuickSort(vector<int> _list, int _len);
        void quick_sort(int left, int right);
        void out();
    

    };

    QuickSort::QuickSort(vector<int> _list, int _len){

    for(int i=0; i<_len; i++) list.push_back(_list[i]);
    this->len = _len;
    

    }
    void QuickSort::quick_sort(int left, int right){

    int i = left;
    int j = right;
    int middleNum = list[left];
    
    while(i<j){
        
        while(i<j && list[j] >= middleNum) j--;
        
        if(i<j){
            list[i] = list[j];
        }
        
        while(i<j && list[i] < middleNum) i++;
        
        if(i<j){
            list[j] = list[i];  
        }
    
    }
    
    list[i] = middleNum; 
    
    if(i!=left) quick_sort(left, i-1);
    if(j!=right)quick_sort(i+1 , right);
    

    }

    void QuickSort::out(){

    for (int i=0; i<len; i++) cout<<list[i]<<",";
    

    }

    int main(){

    int array[23] = {6,4,3,2,6,67,34,546,74,45,75,2,456,7,2,34,246,56,4,3,54,4,7};
    vector<int> list;
    for(int i=0; i<23; i++) list.push_back(array[i]);
    QuickSort mazhe(list, 23);
    mazhe.quick_sort(0,22);
    mazhe.out();
    

    }

    相关文章

      网友评论

        本文标题:10大排序算法之【快速排序】

        本文链接:https://www.haomeiwen.com/subject/oylfuttx.html