【程序員筆試面試必會——排序②】Python實現 計數排序、基數排序
阿新 • • 發佈:2018-01-17
16px 最大 元素 size medium log n) python實現 count
一、計數排序
概要:
時間復雜度O(n),空間復雜度O(k),k是輸入序列的值的範圍(最大值-最小值),是穩定的。計數排序一般用於已知輸入值的範圍相對較小,比如給公司員工的身高體重信息排序。
思路:
輸入數組A為{3,5,1,2,4,3},值的範圍是1~5,所以創建5個桶,序號1,2,3,4,5。裝桶時遍歷一遍輸入數組,A[0]=3,把它放到3號桶;A[1]=5,放到5號桶;1放到1號桶……最後3放到3號桶。現在三號桶的值為2,其他桶的值為1,再遍歷一遍桶數組,按順序把桶倒出,元素被倒出的順序就是排序的順序了。
Python實現:
# coding:utf-8
class CountingSort:
def countingSort(self, A, m):
result = []
A_min = min(A)
A_max = max(A)
buckets_len = A_max - A_min + 1
buckets = [0] * buckets_len # 創建桶
# 裝桶
for n in A:
buckets[n-A_min] += 1
# 桶倒出
for i in xrange(buckets_len):
value = i + A_min
n = buckets[i]
result += [value] * n
return result
l = [54, 35, 48, 36, 27, 12, 44, 44, 8, 14, 26, 17, 28]
print CountingSort().countingSort(l, len(l))
二、基數排序
【程序員筆試面試必會——排序②】Python實現 計數排序、基數排序