📜  鸽巢排序的Python程序

📅  最后修改于: 2022-05-13 01:56:56.436000             🧑  作者: Mango

鸽巢排序的Python程序

Pigeonhole排序是一种排序算法,适用于对元素数量和可能键值数量大致相同的元素列表进行排序。
它需要 O( n + Range ) 时间,其中 n 是输入数组中的元素数,而 \'Range\' 是数组中可能值的数量。

算法的工作:

  1. 在数组中查找最小值和最大值。令最小值和最大值分别为 \'min\' 和 \'max\'。还找到范围为 \'max-min-1\'。
  2. 设置一个最初为空的“鸽笼”数组,其大小与该范围的大小相同。
  3. 访问数组的每个元素,然后将每个元素放入其鸽巢。将元素 arr[i] 放入索引 arr[i] – min 处的孔中。
  4. 按顺序在整个鸽巢数组中开始循环,并将非空洞中的元素放回原始数组中。
# Python program to implement Pigeonhole Sort */
  
# source code : "https://en.wikibooks.org/wiki/
#   Algorithm_Implementation/Sorting/Pigeonhole_sort"
def pigeonhole_sort(a):
    # size of range of values in the list 
    # (ie, number of pigeonholes we need)
    my_min = min(a)
    my_max = max(a)
    size = my_max - my_min + 1
  
    # our list of pigeonholes
    holes = [0] * size
  
    # Populate the pigeonholes.
    for x in a:
        assert type(x) is int, "integers only please"
        holes[x - my_min] += 1
  
    # Put the elements back into the array in order.
    i = 0
    for count in range(size):
        while holes[count] > 0:
            holes[count] -= 1
            a[i] = count + my_min
            i += 1
              
  
a = [8, 3, 2, 7, 4, 6, 8]
print("Sorted order is : ", end =" ")
  
pigeonhole_sort(a)
          
for i in range(0, len(a)):
    print(a[i], end =" ")
     

输出:

Sorted order is : 2 3 4 6 7 8 8 

有关详细信息,请参阅有关鸽巢排序的完整文章!