python計數排序 Python 計數排序

2021-10-11 03:24:03 字數 1626 閱讀 5906

1.[**][python]**

# -*- coding: utf-8 -*-

def _counting_sort(a, b, k):

"""計數排序,偽碼如下:

counting-sort(a, b, k)

1 for i ← 0 to k // 初始化儲存區的值

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)

計數排序是乙個非基於比較的排序演算法。它的優勢在於在對一定範圍內的整數排序時,它的複雜度為 n k 其中k是整數的範圍 當o k o nlogn 時快於任何比較排序演算法。這是一種犧牲空間換取時間的做法,而且當o k o nlog n 的時候其效率反而不如基於比較的排序 基於比較的排序的時間複雜度在...

python計數排序

對每個元素確定小於該元素的個數 def countsort a,k k是元素數值上界 c 0 k result 0 len a for i in range len a c a i c a i 1 計算小於該元素的個數 for i in range k 1 c i 1 c i 1 c i 每個減輕去...

計數排序 python

以下以 1,3,5,8,2,5,4 這組數字來演示。首先,我們找到這組數字中最大的數,也就是 bucketlen 8,建立乙個最大下標為 8 的空陣列 bucket 遍歷資料,將資料的出現次數填入bucket中對應的下標位置中。遍歷 bucket 將資料依次取出即可。def countingsort...