![]() |
#2
雪影辰风2020-04-05 17:33
|

#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;
}
}