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 FTP操作类代码分享
May 13 Python
Python中使用ConfigParser解析ini配置文件实例
Aug 30 Python
Python中subprocess的简单使用示例
Jul 28 Python
用Python进行简单图像识别(验证码)
Jan 19 Python
使用Python爬取最好大学网大学排名
Feb 24 Python
详解Django解决ajax跨域访问问题
Aug 24 Python
django-rest-framework 自定义swagger过程详解
Jul 18 Python
django的ORM操作 增加和查询
Jul 26 Python
matplotlib绘制多个子图(subplot)的方法
Dec 03 Python
Python二元算术运算常用方法解析
Sep 15 Python
通过实例解析python and和or使用方法
Nov 14 Python
python FTP编程基础入门
Feb 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
PHP4引用文件语句的对比
2006/10/09 PHP
PHP中使用数组实现堆栈数据结构的代码
2012/02/05 PHP
PHP生成sitemap.xml地图函数
2013/11/13 PHP
一个JavaScript变量声明的知识点
2013/10/28 Javascript
JS简单的图片放大缩小的两种方法
2013/11/11 Javascript
javascript 函数及作用域总结介绍
2013/11/12 Javascript
ajax+jQuery实现级联显示地址的方法
2015/05/06 Javascript
ECMAScript5(ES5)中bind方法使用小结
2015/05/07 Javascript
js简单网速测试方法完整实例
2015/12/15 Javascript
使用jQuery处理AJAX请求的基础学习教程
2016/05/10 Javascript
AngularJS使用拦截器实现的loading功能完整实例
2017/05/17 Javascript
Angular.js指令学习中一些重要属性的用法教程
2017/05/24 Javascript
Async Validator 异步验证使用说明
2017/07/03 Javascript
vue3.0 CLI - 2.2 - 组件 home.vue 的初步改造
2018/09/14 Javascript
Vue.js 中的 v-model 指令及绑定表单元素的方法
2018/12/03 Javascript
跟老齐学Python之不要红头文件(1)
2014/09/28 Python
python和bash统计CPU利用率的方法
2015/07/10 Python
浅谈Python2、Python3相对路径、绝对路径导入方法
2018/06/22 Python
Python理解递归的方法总结
2019/01/28 Python
python利用itertools生成密码字典并多线程撞库破解rar密码
2019/08/12 Python
python os.path.isfile 的使用误区详解
2019/11/29 Python
在Django中预防CSRF攻击的操作
2020/03/13 Python
浅谈tensorflow中dataset.shuffle和dataset.batch dataset.repeat注意点
2020/06/08 Python
Python Request类源码实现方法及原理解析
2020/08/17 Python
python两种注释用法的示例
2020/10/09 Python
基于CSS3 animation动画属性实现轮播图效果
2017/09/12 HTML / CSS
新西兰演唱会和体育门票网站:Ticketmaster新西兰
2017/10/07 全球购物
《盘古开天地》教学反思
2014/02/28 职场文书
教师政风行风自查自纠报告
2014/10/21 职场文书
2015年社区平安建设工作总结
2015/05/13 职场文书
行政撤诉申请书
2015/05/18 职场文书
教师节老师寄语
2015/05/28 职场文书
2016年“6.26”禁毒宣传月系列活动总结
2016/04/05 职场文书
创业计划书之面包店
2019/09/12 职场文书
创业计划书之游泳馆
2019/09/16 职场文书
Pandas数据结构之Series的使用
2022/03/31 Python