我的合并排序实现 (C++) 有什么问题?
What's wrong with my merge sort implementation (C++)?
我的合并排序实现只能部分工作,甚至有时会引发 seg 错误。
输入: 5 4 3 2 1输出: 0 1 2 3 4
输入: 7 6 5 4 3 2 1输出: 0 1 2 3 4 5 6
输入: 4 3 2 1输出:[一些垃圾值] 1 2 3
输入: 1 2 3 4 5 67 7 8输出:[一些垃圾值] 1 2 3 4 5 7 8
似乎奇数编号的输入不会导致 seg 错误,但偶数输入会导致。不过,在这两种情况下,最大值都不会出现在输出中。任何帮助将不胜感激。
void merge(vector<int>& a, int i, int j)
{
int b[a.size()];
int start = i;
int mid = (i+j)/2;
int k = mid+1;
int l = i;
while(i<=mid && k<=j)
{
if(a[i] >= a[k])
b[l++] = a[k++];
else
b[l++] = a[i++];
}
if(i>mid)
{
while(k<=j)
b[l++] = a[k++];
}
else
{
while(i<=mid)
b[l++] = a[i++];
}
for(l=start; l<=j; l++)
a[l] = b[l];
}
void merge_sort(vector<int>& a, int l, int u)
{
int m;
if(l < u)
{
m = (l+u)/2;
merge_sort(a,l,m);
merge_sort(a,m+1,u);
merge(a,l,u);
}
}
//relevant portion in main
cin >> n;
cout << "n: " << n << endl;
a.resize(n);
for(int j=0; j<n; j++)
cin >> a[j];
cout << endl;
merge_sort(a, 0, a.size());
当
j
可以a.size()
时,您不应该上升到j
(" ...<= j...
")。试试a.size() - 1
.
相关文章:
- 警告处理为错误这里有什么问题
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 当我尝试添加 2 个大字符串时,我无法弄清楚出了什么问题
- 违反const正确性:我应该现实地期待什么问题
- 这个带有模板<类 Vector 的C++代码片段有什么问题>
- 我的逻辑反转字符串中的元音有什么问题?
- 需要以下代码的帮助,下面的代码有什么问题
- 常量公共成员有什么问题?
- 以下代码中的函数模板有什么问题?
- 这个返回元素位置的基于循环的函数有什么问题?
- creat_list2功能有什么问题?
- 格式说明符C++有什么问题
- 任何人都可以告诉我我的 C++ 代码出了什么问题?
- 从 argv[1] 转换为字符 * 字符串后有什么问题?
- 我的堆栈和库存清单程序的结构有什么问题?
- 此工厂功能有什么问题?
- 以下 C++ 代码有什么问题?
- 数组为此合并排序函数提供了正确的输出,但向量给出了不正确的输出.出了什么问题?
- reinterpret_cast,只读访问,简单的可复制类型,会出什么问题?
- 它解决了什么问题,对于非真空初始化,生命周期在初始化之前就开始了