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创建只读属性对象的方法(ReadOnlyObject)
Feb 10 Python
python实现多线程采集的2个代码例子
Jul 07 Python
在Python的Flask框架中使用日期和时间的教程
Apr 21 Python
Python数据类型详解(四)字典:dict
May 12 Python
在Linux命令行终端中使用python的简单方法(推荐)
Jan 23 Python
浅谈Python中的zip()与*zip()函数详解
Feb 24 Python
python3使用matplotlib绘制条形图
Mar 25 Python
如何使用Python 打印各种三角形
Jun 28 Python
python让函数不返回结果的方法
Jun 22 Python
公认8个效率最高的爬虫框架
Jul 28 Python
如何使用python自带IDLE的几种方法
Oct 10 Python
Python 打印自己设计的字体的实例讲解
Jan 04 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
第十五节--Zend引擎的发展
2006/11/16 PHP
PHP通用分页类page.php[仿google分页]
2008/08/31 PHP
php下关于Cannot use a scalar value as an array的解决办法
2010/08/08 PHP
PHP实现单例模式最安全的做法
2014/06/13 PHP
PHP MPDF中文乱码的解决方式
2015/12/08 PHP
PHP在线书签系统分享
2016/01/04 PHP
图文详解PHP环境搭建教程
2016/07/16 PHP
PHP基础之输出缓冲区基本概念、原理分析
2019/06/19 PHP
jquery.lazyload  实现图片延迟加载jquery插件
2010/02/06 Javascript
人人网javascript面试题 可以提前实现下
2012/01/05 Javascript
javascript控制swfObject应用介绍
2012/11/29 Javascript
Javascript访问器属性实例分析
2014/12/30 Javascript
轻松掌握JavaScript单例模式
2016/08/25 Javascript
jquery+ajax实现省市区三级联动效果简单示例
2017/01/04 Javascript
详解微信小程序Page中data数据操作和函数调用
2017/09/27 Javascript
easyui下拉框动态级联加载的示例代码
2017/11/29 Javascript
[06:44]2018DOTA2亚洲邀请赛4.5 SOLO赛 MidOne vs Sumail
2018/04/06 DOTA
在Python3中使用asyncio库进行快速数据抓取的教程
2015/04/02 Python
Python实现复杂对象转JSON的方法示例
2017/06/22 Python
利用pandas将numpy数组导出生成excel的实例
2018/06/14 Python
浅析Python四种数据类型
2018/09/26 Python
通过PHP与Python代码对比的语法差异详解
2019/07/10 Python
Python中字典与恒等运算符的用法分析
2019/08/22 Python
sklearn-SVC实现与类参数详解
2019/12/10 Python
使用Python爬取弹出窗口信息的实例
2020/03/14 Python
python实现经纬度采样的示例代码
2020/12/10 Python
手机配件第一品牌:ZAGG
2017/05/28 全球购物
Deichmann英国:德国鞋类零售商
2021/01/30 全球购物
Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?用contains来区分是否有重复的对象。还是都不用
2013/07/30 面试题
大学生活自我评价
2014/04/09 职场文书
正科级干部考察材料
2014/05/29 职场文书
国际贸易毕业生求职信
2014/07/20 职场文书
2015年幼儿园学期工作总结
2015/05/22 职场文书
总经理年会致辞
2015/07/29 职场文书
一文帮你理解PReact10.5.13源码
2021/04/03 Javascript
使用php的mail()函数实现发送邮件功能
2021/06/03 PHP