排序矩阵的选择算法

Noh*_*sib 23 algorithm

这是一个谷歌面试问题:

给定N*N矩阵.对所有行进行排序,并对所有列进行排序.找到矩阵的第K个最大元素.

在n ^ 2中执行它很简单,我们可以使用堆或合并排序(n lg n)对其进行排序然后得到它,但是有更好的方法,比(n lg n)更好吗?

数组示例::

 1   5   7  12
 3   6   8  14
 4   9  10  15
11  17  19  20
Run Code Online (Sandbox Code Playgroud)

与其他行和列类似,1 <5 <7 <12和1 <3 <4 <11.现在说我们需要找到第10个最小的元素,在这里它是11..hope这增加了一些细节问题......

a d*_*ler 2

是的,Frederickson 和 Johnson 提出了 O(K) 算法。

格雷格·N·弗雷德里克森和唐纳德·B·约翰逊。广义选择和排名:排序矩阵。暹罗 J. 计算机。13,第 14-30 页。http://epubs.siam.org/sicomp/resource/1/smjcat/v13/i1/p14_s1?isAuthorized=no

  • -1 这个答案完全没有用,这篇文章不再可用。回答者回答此问题后一直没有上线。 (3认同)