我正在寻找一种有效的算法来执行以下操作:给定一个包含 N 个项目的数组,以某种方式对其进行排序,以便项目作为 M 个相等的组,其中每个组未排序,但组在彼此之间排序(所有元素一组中的元素小于下一组的任何元素)。
最简单的方法是对整个数组进行排序。但它的效率很低,特别是如果组的数量远小于项目的总数(例如将一百万个项目分成 5 个组)。
目前我已经决定使用快速选择算法(具体来说,它是Floyd-Rivest 变体)将一个数组排序为 2 个未排序的组,然后应用它 M-1 次。一个显着的改进可能是对快速选择应用分而治之的方法,首先将数组分为两组,然后对每一半进行排序,等等,直到我们有 M 个组。一种对无序部分排序问题的概括。
但我有一种直觉,可能有一种更简单、更有效的方法来解决这个问题。有什么我想念的吗?有任何想法吗?我需要它来提高我的RBush JavaScript 库(一种高效的 R*-tree 实现)中的批量插入性能。