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中用于转换字母为小写的lower()方法使用简介
May 19 Python
Python实现删除当前目录下除当前脚本以外的文件和文件夹实例
Jul 27 Python
利用Python实现颜色色值转换的小工具
Oct 27 Python
Python实现求两个csv文件交集的方法
Sep 06 Python
Python设计模式之门面模式简单示例
Jan 09 Python
PyQt5实现类似别踩白块游戏
Jan 24 Python
Python除法之传统除法、Floor除法及真除法实例详解
May 23 Python
pyqt5、qtdesigner安装和环境设置教程
Sep 25 Python
python实现图片横向和纵向拼接
Mar 05 Python
Python实现常见的几种加密算法(MD5,SHA-1,HMAC,DES/AES,RSA和ECC)
May 09 Python
Python加速程序运行的方法
Jul 29 Python
Python数据可视化常用4大绘图库原理详解
Oct 23 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
Opcache导致php-fpm崩溃nginx返回502
2015/03/02 PHP
javascript 兼容FF的onmouseenter和onmouseleave的代码
2008/07/19 Javascript
js注意img图片的onerror事件的分析
2011/01/01 Javascript
javascript动画对象支持加速、减速、缓入、缓出的实现代码
2012/09/30 Javascript
JS实现定时页面弹出类似QQ新闻的提示框
2013/11/07 Javascript
用队列模拟jquery的动画算法实例
2015/01/20 Javascript
Jquery常用的方法汇总
2015/09/01 Javascript
基于Node.js实现nodemailer邮件发送
2016/01/26 Javascript
jQuery实现点击后高亮背景固定显示的菜单效果【附demo源码下载】
2016/09/21 Javascript
老生常谈Javascript中的原型和this指针
2016/10/09 Javascript
如何利用JQuery实现从底部回到顶部的功能
2016/12/27 Javascript
Vuejs实现购物车功能
2017/11/05 Javascript
vue判断input输入内容全是空格的方法
2018/03/02 Javascript
详解微信小程序调起键盘性能优化
2018/07/24 Javascript
微信小程序使用swiper组件实现层叠轮播图
2018/11/04 Javascript
如何基于vue-cli3.0构建功能完善的移动端架子
2019/04/24 Javascript
vue中的 $slot 获取插槽的节点实例
2019/11/12 Javascript
js数组相减简单示例【删除a数组所有与b数组相同元素】
2020/03/04 Javascript
[51:36]EG vs VP 2018国际邀请赛淘汰赛BO3 第一场 8.24
2018/08/25 DOTA
用python实现的可以拷贝或剪切一个文件列表中的所有文件
2009/04/30 Python
python操作摄像头截图实现远程监控的例子
2014/03/25 Python
python3生成随机数实例
2014/10/20 Python
Mac下Supervisor进程监控管理工具的安装与配置
2014/12/16 Python
Python multiprocessing模块中的Pipe管道使用实例
2015/04/11 Python
python2 与python3的print区别小结
2018/01/16 Python
python爬虫正则表达式之处理换行符
2018/06/08 Python
Tornado Web Server框架编写简易Python服务器
2018/07/28 Python
Pandas中Series和DataFrame的索引实现
2019/06/27 Python
美国女鞋品牌:naturalizer(娜然)
2016/08/01 全球购物
党员2014两会学习心得体会
2014/03/17 职场文书
幼儿园教师自我鉴定
2014/03/20 职场文书
公司新年寄语
2014/04/04 职场文书
保护母亲河倡议书
2014/04/14 职场文书
教师学习三严三实心得体会
2014/10/13 职场文书
2014年个人年终总结
2015/03/09 职场文书
送给自己的励志语句:要安静的优秀,悄无声息的坚强
2019/11/26 职场文书