假设我们有一个称为“有序地图”的数据结构。其中散列仍然是一个恒定时间操作,但存储是专门为从1到传入任何值的整数排序的。
linear_sort(arr):
largest_element_in_arr = max(arr)
ordered_map = new map()
// populate values in the map of integers, ranging from 1 to largest integer in array, with 0s.
from 1 to largest_element:
ordered_map[index] = 0
for element in arr:
ordered_map[element] += 1
// collapse empty elements
for element in ordered_map:
delete if element's value is 0
output elements of ordered_map
答案 0 :(得分:1)
它基本上是counting sort,除了将值域标准化为范围[0..n]
并在数组中计数的常规方法之外,您可以使用哈希函数将它们映射到它们的计数。
对于输入值不在有限范围内的稀疏数据(这是计数排序的弱点),它会很有用,但当然它依赖于那个神奇的“有序散列函数”。
编辑:实际上,考虑到您最初填充地图的方式,看起来它仍然使用O(n)
空格,其中n
是输入中最小值 - 最大值范围,这意味着它完全相同计数排序 - 你实际上并没有使用任何哈希函数(你的哈希函数是身份函数,特殊顺序是自然数的排序)!