Поиск двух максимальных элементов в одномерном массиве - C (СИ)
Формулировка задачи:
Доброго времени суток!
Имеется целочисленный одномерный массив. Нужно найти 2 максимальных элемента в массиве и вывести их номера.
Решил проходить двумя циклами. При первом проходе -- поиск 1-го максимального. При втором -- соответственно, 2-го максимального, причем без учета 1-го максимального.
Однако, если массив будет, например,
max1=A[1];
max2=A[1];
for (i=1; i<=N; i++) {
if (A[i]>=max1) {
max1=A[i];
max1_num=i;
}
}
for (i=1; i<=N; i++) {
if (i!=max1_num) {
if (A[i]>=max2) {
max2=A[i];
max2_num=i;
}
}
}
printf("%d с номером [%d]\n%d с номером [%d]\n", max1, max1_num, max2, max2_num);5 4 3 2 1
, то выводит только 1-й элемент. В общем, работает во всех случаях, кроме того, когда 1-й максимальный элемент стоит на 1-м месте. Спасибо!Решение задачи: «Поиск двух максимальных элементов в одномерном массиве»
textual
Листинг программы
#include <u.h>
#include <libc.h>
void
main(void)
{
int i, i1, i2, n;
int v[] = {5, 4, 3, 2, 1};
n = sizeof(v) / sizeof(int);
if (v[0] > v[1]) {
i1 = 0;
i2 = 1;
} else {
i1 = 1;
i2 = 0;
}
for (i = 2; i < n; i++)
if (v[i] > v[i1]) {
i2 = i1;
i1 = i;
} else if (v[i] > v[i2])
i2 = i;
print("[%d] = %d\n[%d] = %d\n", i1, v[i1], i2, v[i2]);
exits(0);
}
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы
- Определяем функцию main()
- Инициализируем переменные i, i1, i2, n
- Определяем массив v
- Вычисляем размер массива n
- Сравниваем первый и второй элементы массива v и меняем значения i1 и i2 если необходимо
- Проходим по массиву от 3-го элемента до последнего и находим максимальные элементы, записывая их в i1 и i2
- Выводим на экран значения i1 и i2
- Завершаем программу