想了很久很久,分治排序总是排不了序,请教
估计是递归那里出错,暂时搞不懂递归的逻辑,总之排序就和没排的一样程序代码:
#include <iostream> #include<vector> #include<algorithm> #include <iterator> void mergesort(std::vector<int>&myarray,size_t l,size_t r); void msort(std::vector<int>&myarray,size_t l,size_t m,size_t r) { size_t n1=m-l+1; size_t n2=r-m; std::vector<int>L(n1); std::vector<int>R(n2); for(size_t i=0;i<n1;++i) { L[i]=myarray[i];//std::cout<<L[i]<<std::endl; } for(size_t i=1;i<n2;++i) { R[i]=myarray[i+m];//std::cout<<R[i]<<std::endl; } /**< 小黄和大绿,小黄的第一个元素是否小于大绿的第一个元素 ,小于的话就把该元素放在总桶的第一个, 比较小黄的第二个和大黄的第一个比较*/ for(size_t k=l,i=0,j=1;k<r;++k) { if(R[j]<L[i]) { myarray[k]=R[j]; j+=1; } else {myarray[k]=L[i]; i+=1;} } } void mergesort(std::vector<int>&myarray,size_t l,size_t r) { if(l>r) { size_t m=(l+r)/2; mergesort(myarray,l,m);//递归这是跟着算法导论的伪代码敲的,一层递归我还是能理解的,双层递归现在理解起来有点难 mergesort(myarray,m+1,r); msort(myarray,l,m,r);} } int main() { std::vector<int>myarray{1,3,5,7,9,2,4,6,8}; // msort(myarray,0,(myarray.size()/2),myarray.size()); mergesort(myarray,0,myarray.size()); for(std::vector<int>::size_type i=0;i<myarray.size();++i) { std::cout<<myarray.at(i)<<std::endl; } }