Python实现的计数排序算法示例


Posted in Python onNovember 29, 2017

本文实例讲述了Python实现的计数排序算法。分享给大家供大家参考,具体如下:

计数排序是一种非常快捷的稳定性强的排序方法,时间复杂度O(n+k),其中n为要排序的数的个数,k为要排序的数的组大值。计数排序对一定量的整数排序时候的速度非常快,一般快于其他排序算法。但计数排序局限性比较大,只限于对整数进行排序。计数排序是消耗空间发杂度来获取快捷的排序方法,其空间发展度为O(K)同理K为要排序的最大值。

计数排序的基本思想为一组数在排序之前先统计这组数中其他数小于这个数的个数,则可以确定这个数的位置。例如要排序的数为 7 4 2 1 5 3 1 5;则比7小的有7个数,所有7应该在排序好的数列的第八位,同理3在第四位,对于重复的数字,1在1位和2位(暂且认为第一个1比第二个1小),5和1一样位于6位和7位。

示例代码:

#! /usr/bin/env python
#coding=utf-8
#计数排序
def CountingSort(a, b, k):
  #c=[0]*(k+1) #let c[0...k] be an all 0 array
  #c=[0 for i in range(0,k+1)]
  c=[]
  for i in range(k+1):
    c.append(0)
  for j in range(len(a)):
    c[a[j]] = c[a[j]] + 1
  for i in range(1, k+1):
    c[i] = c[i] + c[i-1]
  for j in range(len(a)-1, -1, -1):
    b[c[a[j]]-1] = a[j]#!!!!!减一是关键
    c[a[j]] = c[a[j]] - 1
  print b
if __name__ == '__main__':
  a=[2, 5, 3, 0, 2, 3, 0, 3]
  #b=[0]*len(a)
  b=[None for i in range(len(a))]
  print "三水点靠木测试结果:"
  CountingSort(a, b, max(a))

运行结果:

Python实现的计数排序算法示例

PS:关于排序算法的详细说明还可参考本站在线工具:

在线动画演示插入/选择/冒泡/归并/希尔/快速排序算法过程工具
http://tools.3water.com/aideddesign/paixu_ys

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python牛刀小试密码爆破
Feb 03 Python
使用python绘制人人网好友关系图示例
Apr 01 Python
详解python之简单主机批量管理工具
Jan 27 Python
python django 实现验证码的功能实例代码
May 18 Python
使用Python+Splinter自动刷新抢12306火车票
Jan 03 Python
微信跳一跳游戏python脚本
Apr 01 Python
Python学习小技巧总结
Jun 10 Python
简单了解python单例模式的几种写法
Jul 01 Python
Python_查看sqlite3表结构,查询语句的示例代码
Jul 17 Python
python实现批量nii文件转换为png图像
Jul 18 Python
python正则表达式re.search()的基本使用教程
May 21 Python
Python3中最常用的5种线程锁实例总结
Jul 07 Python
Scrapy框架CrawlSpiders的介绍以及使用详解
Nov 29 #Python
pycharm下打开、执行并调试scrapy爬虫程序的方法
Nov 29 #Python
Python快速排序算法实例分析
Nov 29 #Python
Python3学习urllib的使用方法示例
Nov 29 #Python
Python实现的选择排序算法示例
Nov 29 #Python
Python实现的桶排序算法示例
Nov 29 #Python
[原创]教女朋友学Python(一)运行环境搭建
Nov 29 #Python
You might like
PHP Zip压缩 在线对文件进行压缩的函数
2010/05/26 PHP
PHP第一季视频教程(李炎恢+php100 不断更新)
2011/05/29 PHP
Ubuntu12下编译安装PHP5.3开发环境
2015/03/27 PHP
PHP实现的大文件切割与合并功能示例
2018/04/10 PHP
laravel框架使用阿里云短信发送消息操作示例
2020/02/15 PHP
Ajax一统天下之Dojo整合篇
2007/03/24 Javascript
JavaScript 动态改变图片大小
2009/06/11 Javascript
网页编辑器ckeditor和ckfinder配置步骤分享
2012/05/24 Javascript
jquery ajax提交整个表单元素的快捷办法
2013/03/27 Javascript
jquery获取子节点和父节点的示例代码
2013/09/10 Javascript
页面按钮禁用与解除禁用的方法
2014/02/19 Javascript
js的参数有长度限制吗?发现不能超过2083个字符
2014/04/20 Javascript
node.js正则表达式获取网页中所有链接的代码实例
2014/06/03 Javascript
jQuery中iframe的操作(点击按钮新增窗口)
2016/04/20 Javascript
js原生之焦点图转换加定时器实例
2016/12/12 Javascript
vue.js的安装方法
2017/05/12 Javascript
javascript 初学教程及五子棋小程序的简单实现
2017/07/04 Javascript
Bootstrap Multiselect 常用组件实现代码
2017/07/09 Javascript
利用vue+elementUI实现部分引入组件的方法详解
2017/11/22 Javascript
Angularjs过滤器实现动态搜索与排序功能示例
2017/12/13 Javascript
使用Angular CLI进行Build(构建)和Serve详解
2018/03/24 Javascript
Bootstrap实现模态框效果
2019/09/30 Javascript
vue路由切换时取消之前的所有请求操作
2020/09/01 Javascript
python实现2014火车票查询代码分享
2014/01/10 Python
Python下线程之间的共享和释放示例
2015/05/04 Python
Python定义二叉树及4种遍历方法实例详解
2018/07/05 Python
Python SMTP发送邮件遇到的一些问题及解决办法
2018/10/24 Python
appium+python adb常用命令分享
2020/03/06 Python
浅析python 动态库m.so.1.0错误问题
2020/05/09 Python
amazeui页面分析之登录页面的示例代码
2020/08/25 HTML / CSS
天美时手表加拿大官网:Timex加拿大
2016/09/01 全球购物
投标授权委托书范文
2014/08/02 职场文书
检察机关个人对照检查材料
2014/09/15 职场文书
2015年高校保卫处工作总结
2015/07/23 职场文书
投资入股协议书
2016/03/22 职场文书
高中议论文(范文2篇)
2019/08/19 职场文书