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中list循环语句用法实例
Nov 10 Python
详尽讲述用Python的Django框架测试驱动开发的教程
Apr 22 Python
用Python编写web API的教程
Apr 30 Python
在Python中操作字典之update()方法的使用
May 22 Python
Python 3.x 连接数据库示例(pymysql 方式)
Jan 19 Python
Python实现遍历目录的方法【测试可用】
Mar 22 Python
Python网络编程详解
Oct 31 Python
NumPy 如何生成多维数组的方法
Feb 05 Python
python中的print()输出
Apr 12 Python
python2 中 unicode 和 str 之间的转换及与python3 str 的区别
Jul 25 Python
Python基于Hypothesis测试库生成测试数据
Apr 29 Python
python如何提升爬虫效率
Sep 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实现的获取URL信息的类
2007/01/02 PHP
常用的php图片处理类(水印、等比缩放、固定高宽)分享
2015/06/19 PHP
PHP模拟http请求的方法详解
2016/11/09 PHP
Laravel框架查询构造器简单示例
2019/05/08 PHP
Jquery 表单取值赋值的一些基本操作
2009/10/11 Javascript
defer属性导致引用JQuery的页面报“浏览器无法打开网站xxx,操作被中止”错误的解决方法
2010/04/27 Javascript
解析Javascript小括号“()”的多义性
2013/12/03 Javascript
深入理解javascript中的立即执行函数(function(){…})()
2014/06/12 Javascript
JavaScript 学习笔记之操作符(续)
2015/01/14 Javascript
JS模仿手机端九宫格登录功能实现代码
2016/04/28 Javascript
js实现简单的选项卡效果
2017/02/23 Javascript
nodejs创建简易web服务器与文件读写的实例
2017/09/07 NodeJs
Vue引用Swiper4插件无法重写分页器样式的解决方法
2018/09/27 Javascript
JS/HTML5游戏常用算法之碰撞检测 像素检测算法实例详解
2018/12/12 Javascript
通过cordova将vue项目打包为webapp的方法
2019/02/02 Javascript
vue3.0生命周期的示例代码
2020/09/24 Javascript
[05:09]DOTA2-DPC中国联赛2月22日Recap集锦
2021/03/11 DOTA
详细介绍Ruby中的正则表达式
2015/04/10 Python
Python记录详细调用堆栈日志的方法
2015/05/05 Python
python实现数据写入excel表格
2018/03/25 Python
浅谈Python脚本开头及导包注释自动添加方法
2018/10/27 Python
python 中Arduino串口传输数据到电脑并保存至excel表格
2019/10/14 Python
python多项式拟合之np.polyfit 和 np.polyld详解
2020/02/18 Python
pycharm激活码快速激活及使用步骤
2020/03/12 Python
详细分析Python可变对象和不可变对象
2020/07/09 Python
使用phonegap检测网络状态的方法
2017/03/30 HTML / CSS
HTML5制作表格样式
2016/11/15 HTML / CSS
Cinque网上商店:德国服装品牌
2019/03/17 全球购物
如何保障Web服务器安全
2014/05/05 面试题
护士专业推荐信
2013/11/02 职场文书
主办会计岗位职责
2014/03/13 职场文书
公务员四风问题对照检查材料整改措施
2014/09/26 职场文书
医院领导班子四风对照检查材料
2014/09/27 职场文书
违纪检讨书
2015/01/27 职场文书
一劳永逸彻底解决pip install慢的办法
2021/05/24 Python
TV动画《政宗君的复仇》第二季制作决定PV公布
2022/04/02 日漫