当前位置: 移动技术网 > IT编程>脚本编程>Python > python算法学习之计数排序实例

python算法学习之计数排序实例

2019年04月02日  | 移动技术网IT编程  | 我要评论

丰铭网,丙酮回收,加盟小吃

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))

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网