[英]Merging two sorted list in C++
我如何让这段代码工作,我试图以排序的形式将这两个列表合并在一起;
例子:
列表 = 3,8,16,28,50,17,19,30,73,80
其中 3,8,16,28,50 右手边和 17,19,30,73,80 左手边包含在同一个列表中,但作为两个不同的列表接近。
这是我的代码:
int main()
{
int first,last,m,temp, counter = 0,lsize = 11;
int a[lsize] = {3,8,16,28,50,17,19,30,73,80};
for(int i = 0 ; i < lsize; i++)
cout<<a[i]<<" ,";
cout<<"\n";
first = 0;
last = lsize;
m = (first + last) / 2;
int i = 0;
while(counter < lsize){
if(a[first] < a[m+1] && m+1 < last ){
counter++;first++;
}
else if(a[m+1] < a[first] && first <= m){
temp = a[m+1];
shift(a,first,m+1);
a[counter]=temp;
counter++;first++;m++;
}
else if(m+1 > last && first <= m){
a[counter]=a[first];
first++;counter++;
}
else if(first > m && m+1 <= last){
a[counter]=a[m+1];
m++;counter++;
}
}
for(int i = 0 ; i < lsize; i++)
cout<<a[i]<<" ,";
cout<<"\n";
return 0;
}
我一直把它作为输出
3、8、16、17、19、28、30、50、65、73、73
希望有人能帮我指出哪里出错了谢谢
您的列表中有 10 个元素 (lsize),但是在打印语句中循环了 11 次(0 到 lsize-1)。
STL 可以帮助避免错误和浪费时间调试诸如此类的常见算法。
std::vector<int> listA {3,8,16,28,50};
std::vector<int> listB {17,19,30,73,80};
std::vector<int> result;
std::merge(listA.begin(), listA.end(), listB.begin(), listB.end(), std::back_inserter(result));
或者正如 Jarod42 指出的那样,您可以使用
std::vector<int> listA {3,8,16,28,50,17,19,30,73,80};
std::inplace_merge(listA, listA.begin()+5, listA.end());
非常感谢各位!! 我还发现 if(condition) 和 first if else(condition) 缺少一个条件,如下所示:
if(a[first] < a[m+1] && m+1 <= last && first <= m )
和
else if(a[m+1] < a[first] && first <= m && m+1 <= last)
这是每个人的第三个条件。
C++ 不允许可变大小的列表。 所以,你应该在你的代码的第二行得到一个错误。我不知道它是如何为你工作的。 其次,lsize 应该是 10 而不是 11。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.