标题:想了很久很久,分治排序总是排不了序,请教
取消只看楼主
叶纤
Rank: 8Rank: 8
等 级:禁止访问
威 望:1
帖 子:658
专家分:848
注 册:2019-11-22
结帖率:100%
已结贴  问题点数:20 回复次数:3 
想了很久很久,分治排序总是排不了序,请教
估计是递归那里出错,暂时搞不懂递归的逻辑,总之排序就和没排的一样
程序代码:
#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;
           }

}

搜索更多相关主题的帖子: std int vector 递归 排序 
2020-04-05 16:18
叶纤
Rank: 8Rank: 8
等 级:禁止访问
威 望:1
帖 子:658
专家分:848
注 册:2019-11-22
得分:0 
谢谢,已经很好了,我马上用c语法翻译一遍,不行呀,Windows上不能动态的写数组长度
比如
int n;
int a[n];
这样是不可以的,还是需要用vector写
还是手机端的IDE强大


[此贴子已经被作者于2020-4-5 17:42编辑过]


把学习时间浪费在混坛上是傻瓜行为,更何况自己的水平连一两都没到。
2020-04-05 17:37
叶纤
Rank: 8Rank: 8
等 级:禁止访问
威 望:1
帖 子:658
专家分:848
注 册:2019-11-22
得分:0 
我基础知识太薄弱了,我还是想一个不用递归的解法吧

把学习时间浪费在混坛上是傻瓜行为,更何况自己的水平连一两都没到。
2020-04-05 18:18
叶纤
Rank: 8Rank: 8
等 级:禁止访问
威 望:1
帖 子:658
专家分:848
注 册:2019-11-22
得分:0 
谢谢大佬们的解答,确实是我归并那和执行条件那错了,大部分是根据算法书上的伪代码进行分析的,细节上不到位,感谢2楼和7楼的补充,

把学习时间浪费在混坛上是傻瓜行为,更何况自己的水平连一两都没到。
2020-04-06 11:17



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-500872-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 1.459772 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved