鸽巢排序的Python程序
Pigeonhole排序是一种排序算法,适用于对元素数量和可能键值数量大致相同的元素列表进行排序。
它需要 O( n + Range ) 时间,其中 n 是输入数组中的元素数,而 \'Range\' 是数组中可能值的数量。
算法的工作:
- 在数组中查找最小值和最大值。令最小值和最大值分别为 \'min\' 和 \'max\'。还找到范围为 \'max-min-1\'。
- 设置一个最初为空的“鸽笼”数组,其大小与该范围的大小相同。
- 访问数组的每个元素,然后将每个元素放入其鸽巢。将元素 arr[i] 放入索引 arr[i] – min 处的孔中。
- 按顺序在整个鸽巢数组中开始循环,并将非空洞中的元素放回原始数组中。
# 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
有关详细信息,请参阅有关鸽巢排序的完整文章!