• 欢迎访问,如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

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

C++语言 码拜 3年前 (2017-04-26) 151次浏览
本人的问题在代码部分:
#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;
}
解决方案

80

你单步调试可以发现,你程序一直在merge_sort中的while循环中出不来,循环中i与j分别是3 和4,每次循环完都不会变

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明归并排序打印后直接不动了
喜欢 (0)
[1034331897@qq.com]
分享 (0)