使用quicksort的模板版本对矢量和列表进行排序

时间:2015-04-02 19:53:54

标签: c++ list templates vector quicksort

我需要制作一个快速排序的模板版本,对矢量和列表进行排序。目前,我的代码只能成功排序列表。输出显示向量元素已移动但仍保持未排序。

#include <iostream>
#include <vector>
#include <algorithm>
#include <list>

using std::vector;
using std::list;
using std::iterator;


template<typename T>
T partition(T begin, T end) {
    if(begin==end){
        return end;
    }
    T pivot= begin;
    T split= begin;
    for(T I= ++begin; I != end; ++I){
        if(*I <= *pivot){
            std::advance(split,1);
            std::swap(*I,*split);
        }
    }
    std::swap(*split,*pivot);
    return split;
}
template<typename T>
void quicksort(T begin, T end) {
    if (2> std::distance(begin,end)){
        return;
    }
    T middle= partition(begin,end);
    std::advance(middle,1);
    quicksort(middle,end);
}

int main(int argc, char** argv) {


    list<int> mylist= {23,14,31,57,28,49};
    vector<int> myvector= {5,1,4,2,8,18,3,33};

    quicksort(myvector.begin(),myvector.end());
    std::cout<<"The sorted vector:";
    std::cout<<std::endl;
    for(auto x:myvector){
        std::cout<<x<<" ";
    }

    std::cout<<std::endl;

    quicksort(mylist.begin(),mylist.end());
    std::cout<<"The sorted list:";
    std::cout<<std::endl;
    for(auto x:mylist){
        std::cout<<x<<" ";
    }   
    std::cout<<std::endl;
    return 0;
}

上面代码的输出是:

排序后的矢量:
3 1 4 2 5 8 18 33
排序清单:
14 23 28 31 49 57

如您所见,矢量未正确排序。我想提前感谢你给我的任何帮助。

0 个答案:

没有答案