Сортировка выбором, не могу вернуть массив в конце

Рейтинг: 0Ответов: 1Опубликовано: 09.05.2023

cout и cin нет, т.к. пишу под программу, подставляющие тестовые случаи. Выдает такую ошибку:

__tester__.cpp: In function ‘int* SelectionSort(int*, int)’:
__tester__.cpp:21:15: error: ‘i’ was not declared in this scope
 return &array[i];

Пробовал убирать &, показало invalid conversion from ‘int’ to ‘int*’.

Вот код:

int* SelectionSort(int array[], int size) {
    int min = 0; 
    int max = 0;
    for (int i = 0; i < size; i++)
    {
        min = i; 
        for (int j = i + 1; j < size; j++)
            min = ( array[j] < array[min] ) ? j : min;
        if (i != min)
        {
            max = array[i];
            array[i] = array[min];
            array[min] = max;
        }
    }
    return &array[i];
}

Ответы

▲ 1Принят

Что вы планируете вернуть из функции массив или максимальный/минимальный элемент? Потому что по приведенному коду это не очень понятно.


Если собираетесь возвращать массив, то нужно написать просто return array. (Что кстати не имеет смысла, т.к. новый массив вы в функции не создаете, а изменяете существующий). Смотрите более подробно передача массива в функцию.


Если же собираетесь вернуть, конкретный элемент массива (например, максимальный или минимальный), то следует изменить тип возвращаемого значения функции на int SelectionSort(int array[], int size) и возвращать либо return array[min], либо return array[max].


Также следует более внимательней читать описания ошибок, которые предоставляет компилятор, ваша же говорит о том, что переменная i, недоступна в текущей области видимости, так как она существует только внутри цикла for (int i = 0; i < size; i++).