这个线性时间和线性空间排序有名称吗?

时间:2017-10-24 22:47:47

标签: sorting

假设我们有一个称为“有序地图”的数据结构。其中散列仍然是一个恒定时间操作,但存储是专门为从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

1 个答案:

答案 0 :(得分:1)

它基本上是counting sort,除了将值域标准化为范围[0..n]并在数组中计数的常规方法之外,您可以使用哈希函数将它们映射到它们的计数。

对于输入值不在有限范围内的稀疏数据(这是计数排序的弱点),它会很有用,但当然它依赖于那个神奇的“有序散列函数”。

编辑:实际上,考虑到您最初填充地图的方式,看起来它仍然使用O(n)空格,其中n是输入中最小值 - 最大值范围,这意味着它完全相同计数排序 - 你实际上并没有使用任何哈希函数(你的哈希函数是身份函数,特殊顺序是自然数的排序)!