нахождение медианы из 5 элементов


Следующий вопрос был задан в недавнем интервью microsoft

Задан несортированный массив размером 5. Сколько минимальных сравнений необходимо для нахождения медианы? затем он расширил его до размера n.

Решение для 5 элементов по мне равно 6

1) use 3 comparisons to arrange elements in array such that a[1]<a[2] , a[4]<a[5] and a[1]<a[4]
a) compare a[1] and a[2] and swap if necessary
b) compare a[4] and a[5] and swap if necessary 
c) compare a[1] and a[4].if a[4] is smaller than a[1] , then swap a[1] wid a[4] and a[2] wid a[5]
2)if a[3]>a[2].if a[2]<a[4] median value = min(a[3],a[4]) else median value=min(a[2],a[5]) 
3)if a[3]<a[2].if a[3]>a[4] median value = min(a[3],a[5]) else median value=min(a[2],a[4]) 

Можно ли это распространить на n элементов. если нет, то как мы можем найти медиану в n элементах в O (n) помимо quickselect

1 7

1 ответ:

Алгоритм Select разбивает список на группы из пяти элементов. (Оставшиеся элементы пока игнорируются.) Затем для каждой группы из пяти вычисляется медиана (операция, которая потенциально может быть выполнена очень быстро, если пять значений можно загрузить в регистры и сравнить-6 сравнений мин). Затем Select вызывается рекурсивно в этом подсписке из n / 5 элементов, чтобы найти их истинную медиану.