国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

python算法學習之基數排序實例

2020-02-23 05:01:11
字體:
來源:轉載
供稿:網友

基數排序法又稱桶子法(bucket sort)或bin sort,顧名思義,它是透過鍵值的部份資訊,將要排序的元素分配至某些"桶"中,藉以達到排序的作用,基數排序法是屬于穩定性的排序,其時間復雜度為O (nlog(r)m),其中r為所采取的基數,而m為堆數,在某些時候,基數排序法的效率高于其它的比較性排序法。

代碼如下:
# -*- coding: utf-8 -*-

def _counting_sort(A, i):
    """計數排序,以i位進行排序,以適用于基數排序。
    Args:
        A (Sequence): 排序數組
        i (int): 位數,從0開始而不是1
    """
    C = [0] * 10 # 任意位值范圍為[0,9]
    A = [(a / (10 ** i) % 10, a) for a in A] # 元素i位值及其自身的元組的數組
    for k, a in A:
        C[k] = C[k] + 1
    for i in xrange(1, 10):
        C[i] = C[i] + C[i-1]
    B = [0] * len(A) # 結果數組
    for k, a in A[::-1]:
        B[C[k]-1] = a
        C[k] = C[k] - 1
    return B

def radix_sort(A, d):
    """基數排序,從最低位進行排序直到最高位:
    RADIX-SORT(A, d)
    1  for i ← 1 to d
    2    do use a stable sort to sort array A on digit i

    Args:
        A (Sequence): 排序數組
        d (int): 最大數位數
    """
    for i in xrange(d): # 遍歷位數,從低到高
        A = _counting_sort(A, i)
    return A

def rsort(A, d):
    """基數排序(桶排序版本)"""
    for i in xrange(d): # 遍歷位數,從低到高
        S = [[] for _ in xrange(10)] # 存放[0,9]位數值所對應元素([0-9]10個桶)
        for a in A: # 遍歷元素
            S[a / (10 ** i) % 10].append(a) # 存放對應位數值的元素(元素當前位值在哪個桶就放進去)
        A = [a for b in S for a in b] # 以當前位數值排序好的A(依次從各桶里把元素拿出來)
    return A

if __name__ == '__main__':
    import random, timeit

    items = range(10000)
    random.shuffle(items)

    def test_sorted():
        print(items)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 蒙城县| 论坛| 上饶市| 贵德县| 疏附县| 贵州省| 镇安县| 荣成市| 固原市| 威海市| 永定县| 虞城县| 新兴县| 呈贡县| 特克斯县| 凌海市| 集贤县| 樟树市| 正定县| 游戏| 明光市| 左权县| 双桥区| 尼勒克县| 东至县| 保康县| 万全县| 武清区| 遂昌县| 绩溪县| 汤原县| 龙口市| 进贤县| 缙云县| 囊谦县| 武汉市| 新龙县| 大安市| 中牟县| 松溪县| 建昌县|