python算法學習之計數排序實例
python算法學習之計數排序實例
# -*- coding: utf-8 -*-
def _counting_sort(A, B, k):
"""計數排序,偽碼如下:
COUNTING-SORT(A, B, k)
1 for i ← 0 to k // 初始化存儲區(qū)的值
2 do C[i] ← 0
3 for j ← 1 to length[A] // 為各值計數
4 do C[A[j]] ← C[A[j]] + 1
5 ▷ C[i]包含等于i的元素個數
6 for i ← 1 to k // 求計數和,確定<=各值的元素數
7 do C[i] ← C[i] + C[i-1]
8 ▷ C[i]包含小于或等于i的元素個數
9 for j ← length[A] downto 1
10 do B[C[A[j]]] ← A[j] // 將A[j]值放到對應位置
11 C[A[j]] ← C[A[j]] - 1 // 避免元素相同時覆蓋同一位置
T(n) = θ(n)
Args:
A (Sequence): 原數組
B (Sequence): 結果數組
k (int): 值上限,假定了所有元素介于[0,k]
"""
len_c = k + 1
C = [0] * len_c
for a in A:
C[a] = C[a] + 1
for i in range(1, len_c):
C[i] = C[i] + C[i-1]
for a in A[::-1]:
B[C[a]-1] = a
C[a] = C[a] - 1
def counting_sort(A):
"""假定A數組所有元素都介于[0,len(A)-1]"""
B = [0] * len(A)
_counting_sort(A, B, len(A) - 1)
return B
if __name__ == '__main__':
import random, timeit
items = range(10000)
random.shuffle(items)
def test_sorted():
print(items)
sorted_items = sorted(items)
print(sorted_items)
def test_counting_sort():
print(items)
sorted_items = counting_sort(items)
print(sorted_items)
test_methods = [test_sorted, test_counting_sort]
for test in test_methods:
name = test.__name__ # test.func_name
t = timeit.Timer(name + '()', 'from __main__ import ' + name)
print(name + ' takes time : %f' % t.timeit(1))
相關文章
Python實現網絡通信的HTTP請求Socket編程Web爬蟲方法探索
隨著互聯網的不斷發(fā)展,Python作為一門多用途的編程語言,提供了強大的工具和庫來進行網絡連接和通信,本文將深入探討Python中連接網絡的方法,包括HTTP請求、Socket編程、Web爬蟲和REST?API的使用2024-01-01