Рекурсивная функция сортировки - C (СИ)
Формулировка задачи:
Сортировка выбором анализирует массив, отыскивая наименьший элемент массива.Затем этот самый элемент обменивается местами с первым элементом массива. Процесс повторяется для подмассива, что начинается со второго элемента массива.В результате каждого прохода один из элементов занимает соответствующее место. Эта сортировка по продуктивности схожа с пузырьковой - для массива из n элементов нужно выполнить n-1 проходов, а для каждого подмассив нужно выполнить n-1 сравнений для определения наименьшего значения. Когда подмассив, который отбрасываеться, будет содержать только один элемент, значит массив отсортирован. Напишите рекурсивную функцию selectionSort, что выполняет этот алгоритм.
Решение задачи: «Рекурсивная функция сортировки»
textual
Листинг программы
#include <stdio.h>
#define elements_count(arr) ( sizeof(arr) / sizeof(*arr) )
void swap(int * a, int * b) {
int tmp = *a;
*a = *b;
*b = tmp;
}
int * min_element(int * array, size_t count) {
return ( count < 2 ) ? array : min_element(array + ( array[0] > array[count - 1] ), count - 1);
}
void selection_sort(int * array, size_t count) {
if ( count > 1 ) {
swap(array, min_element(array, count));
selection_sort(array + 1, count - 1);
}
}
void dump(int * array, size_t count) {
if ( count ) {
printf("%d ", *array);
dump(array + 1, count - 1);
}
else
printf("\n");
}
int main(void) {
int array[] = { 7, 4, 8, 5, 9, 6, 2, 3, 1 };
printf("Before: ");
dump(array, elements_count(array));
selection_sort(array, elements_count(array));
printf("After: ");
dump(array, elements_count(array));
return 0;
}