好的,所以我正在为我目前正在使用的数据结构和算法编写shell排序函数。我们给了算法本身,但要求在C ++中为模板化类型编写它。写完我认为合适的东西之后,排序会在7次迭代后发生错误,并用-858993460替换我排序中的最高数字。
template <class T>
void shellSort(T list [], int size)
{
int gap = size / 2;
while (gap > 0)
{
for (size_t i = 0; i < size - gap; i++)
{
if (list[i] > list[i + gap])
{
swap(list, list[i], list[i + gap]);
}
for (int j = 0; j < size; j++)
{
cout << list[j] << " ";
}
cout << endl;
}
gap /= 2;
}
bubbleSort(list, size);
}
在运行Shell Sort之前我将Array的值重置为随机分类,只是为了测试其他排序,使用
void resetArray(int list [])
{
list[0] = 5;
list[1] = 2;
list[2] = 7;
list[3] = 2;
list[4] = 3;
list[5] = 4;
list[6] = 1;
cout << "List Reset. List is Now: ";
for (size_t i = 0; i < 6; i++)
{
cout << list[i] << " ";
}
cout << endl;
}
我的排序输出
5 2 4 2 3 7 1
5 2 4 2 3 7 1
5 2 4 2 3 7 1
5 4 2 2 3 7 1
5 4 2 2 7 3 1
5 4 -858993460 2 2 3 1
5 4 -858993460 2 2 3 1
答案 0 :(得分:3)
没有看到你的swap
,我说罪魁祸首是这一行:
swap(list, list[i], list[i + gap]);
您正在传递位置2和3中的值,其中几乎可以预期索引。此调用应如下所示:
swap(list, i, i + gap);
否则,swap
会将数组的值解释为要交换的索引,读取数组外的内存。
为避免将来出现此类问题,请改用std::swap
:
std::swap(list[i], list[i + gap]);