Давайте разберем ваш код, чтобы понять его рабочий процесс.
ваша функция принимает два аргумента: один - массив, а другой - размер массива
selection_sort(int integers[], size_t size)
Вторая часть, если размер массив равен нулю, затем возвращается
if (size == 0) {
return;
}
Третья часть, определить переменные
int largest = 0; //this variable is not used
int largest_index = 0; //this is index for largest array value
int temp; //temporary variable for swapping
Четвертая часть найти индекс наибольшего значения в массиве
for (int i = 0; i < size; ++i) { //Iterate array from 0 to size
if (integers[i] > integers[largest_index]) { /*check if current index value is greater than largest value index */
largest_index = i; /* if value is greater than current index value add index in largest_index variable */
}
В первой итерации для массив [17, 8, 14, 25, 11] large_index будет равен 3 (25).
Пятая часть, своп наибольшее значение и последний элемент массива
[17, 8, 14 , 25, 11] станет [17, 8, 14, 11, 25]
temp = integers[largest_index]; //take 25 in temp
integers[largest_index] = integers[size - 1];
integers[size - 1] = temp; //swap 11 with 25
Последняя часть, рекурсивный вызов функции с массивом уменьшенного размера на 1 элемент
Пример в массив первой итерации будет [17, 8, 14, 11], а во второй итерации [11, 8, 14] он будет продолжать уменьшать размер массива, пока не вернется (размер станет равным нулю)
selection_sort(integers, size - 1);