Общая логика в вашей функции в правильном направлении.Однако вы, кажется, запутались между значениями элементов массива и индексированием, используемым для доступа к элементам массива.
Строка
for (int i = *start; i < *stop - 1; ++i)
показывает первые знакипутаница.
Вы инициализируете i
значением первого элемента массива и увеличиваете значение на последующих итерациях цикла.Это не правильно.Увеличение значения первого элемента массива не имеет логического смысла.
*stop
приводит к неопределенному поведению, поскольку stop
указывает на место после последнего действительного элемента.
Вам необходимо использовать int* i
, int* j
и int* min
для правильной сортировки элементов.Это также означает обновление почти всей функции соответственно.Вот обновленная функция, которая работает для меня.
void selectionSort(int *start, int *stop) {
for (int* i = start; i < (stop - 1); ++i) {
int* min = i;
for (int* j = i + 1; j < stop; ++j) {
if (*j < *min)
{
min = j;
}
}
swap(*i, *min);
}
}
Кроме того, следующие строки в main
не верны.В итоге вы получите доступ к массиву с помощью индекса «вне границ».
for (int j = 0; j < size; j++)
{
cout << data[j+1] << " ";
}
Замените их на
for (int k = 0; k < size; k++)
{
cout << data[k] << " ";
}