Shell Sort заменяет элемент массива на -858993460

Итак, в настоящее время я пишу функцию сортировки оболочки для структур данных и алгоритмов, которые я в настоящее время принимаю. Нам дали сам алгоритм, но попросили написать его для шаблонного типа в 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);

}

перед тем, как запустить сортировку оболочки, я сбрасываю значения массива в случайный ассортимент только для проверки других сортировок, используя

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

Решение

Не видя вашего 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]);
3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]