归并排序打印后直接不动了~~~

kd1158 2016-10-06 07:40:41
我的问题在代码部分:
#include <iostream>
#include <vector>
using namespace std;

class MergeSort
{
int len;
vector<int>list;
vector<int>link;
public:
MergeSort(vector<int>_list , int _len)
{
list.push_back(0);
link.push_back(0);
for(int i = 0 ; i < _len ; ++i)
{
list.push_back(_list[i]);
link.push_back(0);
}
}
int merge_sort(int st1, int st2)
{
int k = 0 , i = st1 , j = st2;
while(i && j)
{
if(list[i] <= list[j])
{
link[k] = i;
k = i;
i = link[i];
}
else
{
link[k] = j;
k = j;
j = link[j];
}
}
if(!i)link[k] = j;
else link[k] = i;
return link[0];
}
int list_merge(int left , int right)
{
if(left >= right)
return left;
int mid = (left + right) /2 ;
return list_merge(merge_sort(left , mid) , merge_sort(mid + 1 , right));//问题出现在这里,我用debug调试,这个递归
//只递归后半部分,前半部分就直接卡住了,是哪错了
}
void Print()
{
int i = link[0];
while(i)
{
cout << list[i] << " ";
i = link[i];
}
}
};

int main()
{
int a[4] = {3,2,5,1};
vector<int>tt(a , a+4);
MergeSort ms(tt , 4);
ms.list_merge(1,4);
ms.Print();

return 0;

}
...全文
61 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
kd1158 2016-10-06
  • 打赏
  • 举报
回复
引用 1 楼 paschen 的回复:
你单步调试可以发现,你程序一直在merge_sort中的while循环中出不来,循环中i与j分别是3 和4,每次循环完都不会变
我看到我的错误了,我递归写返了,兄弟,跟你聊了下,放松了
kd1158 2016-10-06
  • 打赏
  • 举报
回复
引用 1 楼 paschen 的回复:
你单步调试可以发现,你程序一直在merge_sort中的while循环中出不来,循环中i与j分别是3 和4,每次循环完都不会变
但是我分析了下程序的逻辑 ,不应该会卡在那一步!是不是程序需要一个返回值的问题?
paschen 版主 2016-10-06
  • 打赏
  • 举报
回复
你单步调试可以发现,你程序一直在merge_sort中的while循环中出不来,循环中i与j分别是3 和4,每次循环完都不会变

64,639

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧