想了很久很久,分治排序总是排不了序,请教
估计是递归那里出错,暂时搞不懂递归的逻辑,总之排序就和没排的一样
程序代码:
#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;
}
}








)然后进行两次递归


确实是我归并那和执行条件那错了,大部分是根据算法书上的伪代码进行分析的,细节上不到位,感谢2楼和7楼的补充,