Просто для забавы (и кто знает, это может быть быстрее) есть еще один рандомизированный медианный алгоритм, технически объясненный в книге Митценмахера и Апфолла. По сути, вы выбираете подмножество списка с полиномиально меньшими размерами (и с некоторыми причудливыми книгами) так, чтобы оно, вероятно, содержало реальную медиану, а затем использовали его для поиска настоящей медианы. Книга на Google Books, и вот ссылка . Примечание. Мне удалось прочитать страницы алгоритма, так что, предположив, что книги Google открывают одинаковые страницы для всех, вы тоже можете их прочитать.
Это рандомизированный алгоритм с.т. если он находит ответ, то он на 100% уверен, что это правильный ответ (это называется стилем Лас-Вегас). Случайность возникает из среды выполнения - иногда (с вероятностью 1 / (sqrt (n)), я думаю) она НЕ СМОЖЕТ найти медиану и должна быть повторно запущена.
Асимптотически, это абсолютно линейно, когда вы берете на себя риск сбоя - то есть, это немного меньше, чем линейно, именно так, что, когда вы принимаете во внимание, сколько раз вам может понадобиться перезапустите его, оно станет линейным.
Примечание: я не говорю, что это лучше или хуже - я, конечно, не проводил сравнения между этими алгоритмами в реальном времени! Я просто представляю дополнительный алгоритм, который имеет линейное время выполнения, но работает существенно другим способом.