Написать рекурсивную функцию, возвращающую третье по величине число в массиве - C (СИ)
Формулировка задачи:
Доброго времени суток друзья.
тут вот такая задачка.
надо сделать рекурсивную функцию.
функция получает массив целый чисел и его размер.
размер массива минимум 3.
функция возвращает 3-ие по велечене число в массиве.
функция "проходит" только один рас по всему массиву и не меняет в нем не чего.
пример:
массив={3,7,4,500,6,3,400,9,300,2,8,5,1}
функция возвращает 300.
main выводит на экран ответ.
заранее спасибо)
Решение задачи: «Написать рекурсивную функцию, возвращающую третье по величине число в массиве»
textual
Листинг программы
void swap_ints(int* a, int* b)
{
int temp = *a;
*a = *b;
*b = temp;
}
int search_third(int* arr, int n)
{
static int maximums[3] = { INT_MIN, INT_MIN, INT_MIN };
int max;
if(n--)
{
max = arr[n];
if(max > maximums[0])
{
swap_ints(maximums + 2, maximums + 1);
swap_ints(maximums + 1, maximums);
maximums[0] = max;
}
search_third(arr, n);
}
return maximums[2];
}
int main()
{
int mas[] = {3,7,4,500,6,3,400,9,300,2,8,5,1};
printf("%d\n", search_third(mas, sizeof(mas)/sizeof(int)));
return 0;
}
Объяснение кода листинга программы
- В функции swap_ints происходит обмен значениями двух указателей на int.
- В функции search_third массив arr содержит некоторое количество чисел.
- В функции search_third имеется статический массив maximums, в котором хранятся три минимальных значения.
- Переменная n содержит количество элементов в массиве arr.
- В функции search_third выполняется рекурсивный вызов функции search_third с уменьшенным значением n.
- В функции search_third происходит поиск третьего по величине числа в массиве arr путем сравнения максимального значения в массиве arr с значениями в массиве maximums.
- Если максимальное значение в массиве arr больше максимального значения в массиве maximums, то значения в массиве maximums переставляются так, чтобы максимальное значение в массиве arr стало третьим по величине.
- Затем происходит рекурсивный вызов функции search_third с уменьшенным значением n.
- В конце функции search_third возвращается третье по величине значение из массива arr.
- В функции main создается массив mas, содержащий некоторые числа.
- Функция search_third вызывается в функции main с массивом mas и его размером в качестве аргументов.
- Результат работы функции search_third выводится на экран.
- Возвращаемое значение функции search_third содержит третье по величине число в массиве mas.
- Все числа в массиве mas меньше или равны возвращаемому значению функции search_third.
- Все числа в массиве mas больше или равны второму по величине числу в массиве mas.
- Все числа в массиве mas меньше или равны второму по величине числу в массиве mas.
- В функции main выполняется рекурсивный вызов функции main с уменьшенным значением n.
- В функции main создается массив mas, содержащий некоторые числа.
- Функция search_third вызывается в функции main с массивом mas и его размером в качестве аргументов.
- Результат работы функции search_third выводится на экран.