【发布时间】:2018-02-11 11:01:56
【问题描述】:
所以我正在考虑一种可能有效的新排序算法,但我不太确定。
1) 假设我们有一个只有正数的数组 a。
2)我们遍历数组,找到最大的数n。
3) 我们创建一个大小为 n+1 的新数组 b。
4)我们遍历未排序数组中的每个条目,并将第二个数组中我们正在查看的未排序数组编号的索引处的值增加一。 (在伪代码中,这意味着:b[a[i]]++;而 a[i] 是我们当前正在查看的数字)
5) 一旦我们对 a 中的每个元素都完成了此操作,数组 b 在每个索引处存储该索引的确切数字数量。 (例如:b[0] = 3 表示我们在初始数组 a 中有 3 个零)
6)我们遍历整个数组 b 并跳过所有空字段并从中创建一个新的列表或数组。
所以我可以想象这个算法对于较小的数字可能非常快速和高效,因为最后我们必须遍历整个数组 b 来构建排序的数组,这将非常耗时。
例如,如果我们有一个数组 a = {1000, 1} 它仍然会检查数组 b 中的 1001 个元素,无论它们是否为 0,即使我们在初始数组中只有 2 个元素。
但是,对于较小的数字,我们应该几乎得到 O(n) 的结果?我不太确定,这就是我问你的原因。也许我什至错过了一些非常重要的东西。
提前感谢您的帮助:)
【问题讨论】:
-
它被称为counting sort。
标签: java arrays algorithm performance sorting