在不排序且复杂度为 O(n) 的情况下查找第 i 个索引上的元素

Find the element on i th index without sorting and in O(n) complexity

最近遇到一个问题,

存在一个包含 n 个元素的未排序数组。一旦我们对数组进行排序, i 第一个索引将有一个元素。你如何找到哪个元素将出现在 i th index in O(n) complexity on the unsorted array?

我试了很多方法,最后得出的结论是我们可能需要用到hash map。但是后来我发现hash map的实现通常遵循树结构,插入的复杂度log n

我该如何进行?

您需要线性时间选择算法。它的运行时间在最坏情况下是O(n)。您可以在 Introduction to Algorithms, Second Edition or on the Internet e.g. here.
的“9.3 最坏情况线性时间中的选择”一章中找到它的描述 您还可以使用随机 select 算法。它具有预期的线性时间。详见同书“9.2 期望线性时间选择”