C++ 合并排序-向量下标超出范围
我正试图让一个合并排序程序工作,以及一个已经在工作的基数排序,使用向量 然而,合并排序总是给我“向量下标超出范围”错误。我知道为什么会出现这个错误,但我不知道应该做什么改变来阻止它 代码:C++ 合并排序-向量下标超出范围,c++,sorting,vector,C++,Sorting,Vector,我正试图让一个合并排序程序工作,以及一个已经在工作的基数排序,使用向量 然而,合并排序总是给我“向量下标超出范围”错误。我知道为什么会出现这个错误,但我不知道应该做什么改变来阻止它 代码: #包含“Includes.h” 类合并排序 { 公众: std::vector合并排序(std::vector列表、整数低、整数高、整数最大) { int mid; if(low
#包含“Includes.h”
类合并排序
{
公众:
std::vector合并排序(std::vector列表、整数低、整数高、整数最大)
{
int mid;
if(low while((h从不使用参数max。通常,mergesort的正确索引是结束索引(比向量中的最后一个索引多一个)。in merge(),将h和i设置为low-1将导致超出范围问题,请将它们都设置为low,而不是low-1。由于合并会复制回列表,因此mergesort和merge应该是使用参数引用的无效函数:
void mergeSort(std::vector<int> &list, int low, int high)
void merge(std::vector<int> &list, int low, int mid, int high)
在“合并”中,早期行应为:
if ((high-low) > 1) // nothing to do if 0 or 1 elements
{ // This will be when the given set is a single number.
mid = low + (high - low) / 2;
mergeSort(list, low, mid);
mergeSort(list, mid, high);
merge(list, low, mid, high;
h = low;
i = low;
j = mid;
while ((h < mid) && (j < high)) // change <= to <
mergeSort(std::vector<int> list, 0, list.size());
h=低;
i=低;
j=中等;
而((h1)…我更新了我的答案来说明这一点。
h = low;
i = low;
j = mid;
while ((h < mid) && (j < high)) // change <= to <
mergeSort(std::vector<int> list, 0, list.size());