我认为这是一个重复问题,但我找不到。
假设我们有一个数组,我们知道每个值都是唯一的,且每个值都在一个范围内。例如,假设我们知道该数组由介于0和100之间的唯一值组成。示例:
[ 5, 46, 15, 83, 55, 28 ]
我想将这个数组按照以下方式排序:
[ 5, 15, 28, 46, 55, 83 ]
显然,我可以使用快速排序或任何其他比较排序,但其时间复杂度为O(n log n)
。也存在非比较排序,例如基数排序、桶排序、计数排序等,但据我所知,这些排序都不能维护值必须是唯一的约束条件。
通常情况下,允许的约束条件越多,算法就可以变得越有效率。是否存在任何更有效率的算法来处理唯一有界数组?如果没有,那么哪种非比较排序算法对于这类型数据集来说最有效率?
Object.keys( arr.reduce( (o,v) => { o[ v ] = null; return o; }, {} ) )
可以尝试一下。 - Kaiido