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中字典和JSON互转操作实例
Jan 19 Python
Python中用PIL库批量给图片加上序号的教程
May 06 Python
Python创建模块及模块导入的方法
May 27 Python
利用python求解物理学中的双弹簧质能系统详解
Sep 29 Python
Python3读取Excel数据存入MySQL的方法
May 04 Python
Django框架登录加上验证码校验实现验证功能示例
May 23 Python
Python tkinter 下拉日历控件代码
Mar 04 Python
PyQt5中向单元格添加控件的方法示例
Mar 24 Python
django ORM之values和annotate使用详解
May 19 Python
Python 私有属性和私有方法应用场景分析
Jun 19 Python
浅谈keras中Dropout在预测过程中是否仍要起作用
Jul 09 Python
jupyter notebook远程访问不了的问题解决方法
Jan 11 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
基于mysql的论坛(3)
2006/10/09 PHP
php中常见的sql攻击正则表达式汇总
2014/11/06 PHP
php打乱数组二维数组多维数组的简单实例
2016/06/17 PHP
php实现算术验证码功能
2018/12/05 PHP
PDO::_construct讲解
2019/01/27 PHP
Laravel框架实现超简单的分页效果示例
2019/02/08 PHP
ThinkPHP5.0框架使用build 自动生成模块操作示例
2019/04/11 PHP
js停止输出代码
2008/07/20 Javascript
强大的jquery插件jqeuryUI做网页对话框效果!简单
2011/04/14 Javascript
ajax请求get与post的区别总结
2013/11/04 Javascript
获取3个数组不重复的值的具体实现
2013/12/30 Javascript
jquery datatable后台封装数据示例代码
2014/08/07 Javascript
AngularJS ng-bind-template 指令详解
2016/07/30 Javascript
百度地图API之百度地图退拽标记点获取经纬度的实现代码
2017/01/12 Javascript
JS生成一维码(条形码)功能示例
2017/01/19 Javascript
jquery实现tab选项卡切换效果(悬停、下方横线动画位移)
2017/05/05 jQuery
Node.js编写CLI的实例详解
2017/05/17 Javascript
JavaScript模板引擎原理与用法详解
2018/12/24 Javascript
使用nvm和nrm优化node.js工作流的方法
2019/01/17 Javascript
浅谈webpack和webpack-cli模块源码分析
2020/01/19 Javascript
python字符串连接方式汇总
2014/08/21 Python
全面了解python中的类,对象,方法,属性
2016/09/11 Python
Python提取网页中超链接的方法
2016/09/18 Python
python如何压缩新文件到已有ZIP文件
2018/03/14 Python
python tkinter 设置窗口大小不可缩放实例
2020/03/04 Python
Python爬虫获取豆瓣电影并写入excel
2020/07/31 Python
python 如何使用find和find_all爬虫、找文本的实现
2020/10/16 Python
animation和transition的区别
2020/10/12 HTML / CSS
利用html5 file api读取本地文件示例(如图片、PDF等)
2018/03/07 HTML / CSS
Html5 滚动穿透的方法
2019/05/13 HTML / CSS
全球速卖通西班牙站:AliExpress西班牙
2017/10/30 全球购物
优秀毕业生求职信
2014/06/05 职场文书
践行党的群众路线心得体会
2014/11/05 职场文书
退休职工欢送会致辞
2015/08/01 职场文书
关于运动会的广播稿
2015/08/19 职场文书
nginx常用命令放入shell脚本详解
2021/03/31 Servers