【发布时间】:2014-10-24 23:24:23
【问题描述】:
我正在寻找一种有效的算法来执行以下操作:给定一个包含 N 个项目的数组,以某种方式对其进行排序,以便项目作为 M 个相等的组出现,其中每个组未排序,但组在彼此之间排序(一组中的所有元素都小于下一组中的任何元素)。
最简单的方法是对整个数组进行排序。但它效率低下,尤其是当组数远小于项目总数时(例如,将一百万个项目分为 5 个组)。
目前我已决定使用quickselect 算法(具体来说,它是Floyd-Rivest variation)将一个数组排序为2 个未排序的组,然后将其应用M-1 次。一个显着的改进可能是对快速选择应用分而治之的方法,首先将数组分为两组,然后对每一半进行排序,等等,直到我们有 M 个组。 unordered partial sorting 问题的一种概括。
但我有一种直觉,可能有一种更简单、更有效的方法来解决这个问题。有什么我想念的吗?有任何想法吗?我需要这个来提高我的RBush JavaScript library(一种高效的 R*-tree 实现)中的批量插入性能。
【问题讨论】:
标签: algorithm sorting partitioning selection-sort quickselect