ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
2 мая
1426006 Топик полностью
Dingo (13.04.2024 09:42, просмотров: 115) ответил Idler на Маленький вопросик: Есть uint16_t captures[4]. Как самым быстрым способом найти в нем второе сверху по величине значение. Сортировка, даже 4 значений, дольше, чем хотелось бы. Вроде бы можно сделать несколько сравнений с построением индекса (т.е, по результату первого сравнения +1, по второму +2, по третьему +4 и.т.д), потом таблично. Но вариантов размещения 4 чисел всего 24, а сравнение каждого с каждым дает индекс [0..63], то есть 6 сравнений избыточны...
Хранить не только максимальное, но и пред-максимальное. Сравнили с максимальным, если больше - теперь новое максимальное, а старое стало пред-макс. А хранить индексы или значения - как удобней. 

1. инициализировали значения: макси=оченьмалое, предмакс=оченьмалое, ячейка №0

2. если ячейка больше макси, то предмакс=макси, макси = ячейка

3. если есть ячейки: переключить на следующую, перейти пункт 2


Всё. На выходе в предмакс требуемое. (1 сравнение, по результатам два присвоения) + организация цикла.