我需要制作一个快速排序的模板版本,对矢量和列表进行排序。目前,我的代码只能成功排序列表。输出显示向量元素已移动但仍保持未排序。
#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
如您所见,矢量未正确排序。我想提前感谢你给我的任何帮助。