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中使用scapy模拟数据包实现arp攻击、dns放大攻击例子
Oct 23 Python
Python bsddb模块操作Berkeley DB数据库介绍
Apr 08 Python
Python中Continue语句的用法的举例详解
May 14 Python
Python使用当前时间、随机数产生一个唯一数字的方法
Sep 18 Python
Python+OpenCV实现车牌字符分割和识别
Mar 31 Python
python selenium 对浏览器标签页进行关闭和切换的方法
May 21 Python
对python抓取需要登录网站数据的方法详解
May 21 Python
django 使用 request 获取浏览器发送的参数示例代码
Jun 11 Python
Python图像处理之图像的缩放、旋转与翻转实现方法示例
Jan 04 Python
Python创建字典的八种方式
Feb 27 Python
简单了解python的一些位运算技巧
Jul 13 Python
TensorFlow低版本代码自动升级为1.0版本
Feb 20 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
typecho插件编写教程(六):调用接口
2015/05/28 PHP
php实现在多维数组中查找特定value的方法
2015/07/29 PHP
PHP实现的简单分页类及用法示例
2016/05/06 PHP
php 遍历目录,生成目录下每个文件的md5值并写入到结果文件中
2016/12/12 PHP
深入解析PHP中SESSION反序列化机制
2017/03/01 PHP
JavaScript 异步方法队列链实现代码分析
2010/06/05 Javascript
JavaScript 事件系统
2010/07/22 Javascript
javascript 实现简单的table排序及table操作练习
2012/12/28 Javascript
jquery之超简单的div显示和隐藏特效demo(分享)
2013/07/09 Javascript
jquery 扑捉回车键事件代码
2014/04/24 Javascript
使用javascript实现监控视频播放并打印日志
2015/01/05 Javascript
介绍JavaScript的一个微型模版
2015/06/24 Javascript
适用于javascript开发者的Processing.js入门教程
2016/02/24 Javascript
jquery获取复选框checkbox的值实现方法
2016/05/30 Javascript
使用JavaScript判断手机浏览器是横屏还是竖屏问题
2016/08/02 Javascript
轻松掌握JavaScript装饰者模式
2016/08/27 Javascript
vuejs2.0运用原生js实现简单的拖拽元素功能示例
2017/02/24 Javascript
JS中的回调函数实例浅析
2018/03/21 Javascript
详解vue中axios的封装
2018/07/18 Javascript
JS localStorage存储对象,sessionStorage存储数组对象操作示例
2020/02/15 Javascript
vue实现前端分页完整代码
2020/06/17 Javascript
[44:40]Serenity vs Pain 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
python计算书页码的统计数字问题实例
2014/09/26 Python
Python使用random和tertools模块解一些经典概率问题
2015/01/28 Python
用Python实现斐波那契(Fibonacci)函数
2016/03/25 Python
Python多进程同步简单实现代码
2016/04/27 Python
python3.5 tkinter实现页面跳转
2018/01/30 Python
pytorch对可变长度序列的处理方法详解
2018/12/08 Python
Django ORM 聚合查询和分组查询实现详解
2019/08/09 Python
新加坡时尚网上购物:Zalora新加坡
2016/07/26 全球购物
佳能法国商店:Canon法国
2019/02/14 全球购物
飞利浦美国官网:Philips美国
2020/02/28 全球购物
蛋糕店创业计划书
2014/05/06 职场文书
捐助倡议书
2015/01/19 职场文书
用golang如何替换某个文件中的字符串
2021/04/25 Golang
mybatis中sql语句CDATA标签的用法说明
2021/06/30 Java/Android