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


Posted in Python onDecember 18, 2013

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 相关文章推荐
使用Python实现一个简单的项目监控
Mar 31 Python
Python函数式编程指南(四):生成器详解
Jun 24 Python
Python操作MongoDB详解及实例
May 18 Python
python数据结构链表之单向链表(实例讲解)
Jul 25 Python
python中列表和元组的区别
Dec 18 Python
pytorch + visdom 处理简单分类问题的示例
Jun 04 Python
详解django中使用定时任务的方法
Sep 27 Python
python opencv minAreaRect 生成最小外接矩形的方法
Jul 01 Python
python的常见矩阵运算(小结)
Aug 07 Python
Django 请求Request的具体使用方法
Nov 11 Python
tensorflow生成多个tfrecord文件实例
Feb 17 Python
Python中正则表达式对单个字符,多个字符和匹配边界等使用
Jan 27 Python
python算法学习之基数排序实例
Dec 18 #Python
python算法学习之桶排序算法实例(分块排序)
Dec 18 #Python
python计算最大优先级队列实例
Dec 18 #Python
python计算最小优先级队列代码分享
Dec 18 #Python
python查找第k小元素代码分享
Dec 18 #Python
python获取beautifulphoto随机某图片代码实例
Dec 18 #Python
python使用urllib2模块获取gravatar头像实例
Dec 18 #Python
You might like
php获取网页请求状态程序示例
2014/06/17 PHP
destoon首页调用求购供应信息的地区名称的方法
2014/08/21 PHP
php生成txt文件实例代码介绍
2016/04/28 PHP
PHP实现上一篇下一篇的方法实例总结
2016/09/22 PHP
ThinkPHP框架中使用Memcached缓存数据的方法
2018/03/31 PHP
PHP设计模式之原型设计模式原理与用法分析
2018/04/25 PHP
php文件后缀不强制为.php的实操方法
2019/09/18 PHP
Avengerls vs KG BO3 第一场2.18
2021/03/10 DOTA
一个可以显示阴历的JS代码
2007/03/05 Javascript
JavaScript浏览器选项卡效果
2010/08/25 Javascript
IE不支持getElementsByClassName最终完美解决方案
2012/12/17 Javascript
JS 添加千分位与去掉千分位的示例
2013/07/11 Javascript
JS JSON对象转为字符串的简单实现方法
2013/11/18 Javascript
异步加载JS、CSS代码(推荐)
2016/06/15 Javascript
AngularJs ng-repeat 嵌套如何获取外层$index
2016/09/21 Javascript
JavaScript实现经典排序算法之冒泡排序
2016/12/28 Javascript
Js面试算法详解
2018/04/08 Javascript
浅谈vue加载优化策略
2019/03/19 Javascript
如何使用50行javaScript代码实现简单版的call,apply,bind
2019/08/14 Javascript
详细分析Node.js 多进程
2020/06/22 Javascript
[44:04]OG vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
python按照多个字符对字符串进行分割的方法
2015/03/17 Python
简单介绍Python中的RSS处理
2015/04/13 Python
详解Python命令行解析工具Argparse
2016/04/20 Python
python遍历文件夹下所有excel文件
2018/01/03 Python
浅谈Python 多进程默认不能共享全局变量的问题
2019/01/11 Python
Python Django框架实现应用添加logging日志操作示例
2019/05/17 Python
Python中判断子串存在的性能比较及分析总结
2019/06/23 Python
pycharm中import呈现灰色原因的解决方法
2020/03/04 Python
Python读取图像并显示灰度图的实现
2020/12/01 Python
芝加哥牛排公司:Chicago Steak Company
2018/10/31 全球购物
安全生产月标语
2014/10/07 职场文书
交通运输局四风问题对照检查材料思想汇报
2014/10/09 职场文书
表扬稿范文
2015/01/17 职场文书
庆七一晚会主持词
2015/06/30 职场文书
MySQL中LAG()函数和LEAD()函数的使用
2022/08/14 MySQL