C/C++

C++ как найти N-ый максимальный элемент масива?

Можно ли не сортируя массив найти, например, второй максимальный элемент массива, или пятый, или десятый? То есть N-ный.

Например, в массиве 9 2 3 4 6, третим максимальным элементом будет 4.

А как написать программу, чтобы пользователь вводил число N и получал ответ?
#include <iostream>
#include <iomanip>
#include <random>
using namespace std;
struct Box {
int a, b, c;
Box() : a(0), b(0), c(0) {}
void insert(int x) {
if (x > a) {
swap(b, c);
swap(a, b);
a = x;
} else if (x > b) {
swap(b, c);
b = x;
} else if (x > c) {
c = x;
}
}
};
int main() {
const auto m = 10;
const auto n = 15;
int arr[n];
uniform_int_distribution<> uid(m, m + n);
mt19937 gen{ random_device()() };
for (auto& x : arr) x = uid(gen);
for (auto x : arr) cout << setw(4) << x;
puts("\n");
Box box;
for (auto x : arr) box.insert(x);
auto [first, second, tird] = box;
system("chcp 1251 > nul");
cout
<< "Первый: " << first << '\n'
<< "Второй: " << second << '\n'
<< "Третий: " << tird << '\n';
system("pause > nul");
}
Мурат Ибрагимов
Мурат Ибрагимов
90 502
Лучший ответ
Евгений Давыдкин Здравствуйте!

Можно ли с вами как-нибудь связаться для консультации, пожалуйста?

Это не просьба о решении каких-то задач. Просто нужен совет что и как изучать.

Я смогу оплатить вашу помощь.
Можно. Но быстрыми методами сортировки это делается быстрее. И проще, так они уже обычно имеются готовые в стандартных библиотеках..
СА
Стас Актанко
97 440
Ищешь максимальный элемент.
Затем тот, с котором будет минимальной разность у максимального, но чтобы он был меньше максимального. Это второй.
Затем тот, с которым будет минимальная разность у второго, но чтобы он был меньше второго. Это третий.
Поиск минимальной разности делается по тому же принципу как и поиск максимального или минимального элемента.
Zol Zelent
Zol Zelent
92 464
Евгений Давыдкин То есть, здесь должно быть N + 1 циклов?

Похожие вопросы