Relying on Deno environment.
参考维基百科 - Floyd-Rivest Algorithm
Floyd-Rivest算法是一个分治法的算法,通过使用采样的辅助将列表分成3组。然后在适当的集合中递归选择第k
个最小的元素。
常规步骤:
- 从列表
L
中随机选择一个小的列表S - 从
S
中,递归选取两个元素u
和v
,使u < v
。这两个元素将成为分区的枢轴,并且包含它们之间整个列表(排序列表中)的第k
个最小的元素。 - 使用
u
和v
将S
分区成三个集合:A
、B
、C
;A将包含小于u
的元素,B
将包含u
和v
之间的元素,C
将包含大于v
的元素。 - 通过将
L
中的其余元素(即L - S
的元素)与u
或v
进行比较,并将它们放入适当的集合中,从而对它们进行分区。如果k
小于L
中四舍五入后的元素个数的一半,则应将其余元素先和v
比较,然后将它们与u
比较(如果它们小于v
)。否则,将其余元素先与u
比较,如果大于u
则仅与v
比较。 - 根据
k
的值,将算法递归应用于适当的集合,以选择L
中的第k
个最小的元素。