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 def函数的定义、使用及参数传递实现代码
Aug 10 Python
Python使用py2exe打包程序介绍
Nov 20 Python
Python实现的个人所得税计算器示例
Jun 01 Python
Python之使用adb shell命令启动应用的方法详解
Jan 07 Python
Python实现把多维数组展开成DataFrame
Nov 30 Python
Python接口测试文件上传实例解析
May 22 Python
浅谈keras2 predict和fit_generator的坑
Jun 17 Python
Python实时监控网站浏览记录实现过程详解
Jul 14 Python
python Matplotlib基础--如何添加文本和标注
Jan 26 Python
Python xlwings插入Excel图片的实现方法
Feb 26 Python
python 算法题——快乐数的多种解法
May 27 Python
Python Pygame实战之塔防游戏的实现
Mar 17 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
杏林同学录(七)
2006/10/09 PHP
PHP中防止直接访问或查看或下载config.php文件的方法
2012/07/07 PHP
用mysql_fetch_array()获取当前行数据的方法详解
2013/06/05 PHP
PHP 如何利用phpexcel导入数据库
2013/08/24 PHP
php中smarty区域循环的方法
2015/06/11 PHP
Zend Framework教程之Loader以及PluginLoader用法详解
2016/03/09 PHP
yii2.0整合阿里云oss删除单个文件的方法
2017/09/19 PHP
php写入txt乱码的解决方法
2019/09/17 PHP
别了 JavaScript中的isXX系列
2012/08/01 Javascript
JavaScript中valueOf函数与toString方法深入理解
2012/12/02 Javascript
javascript自动给文本url地址增加链接的方法分享
2014/01/20 Javascript
完美兼容各大浏览器的jQuery仿新浪图文淡入淡出间歇滚动特效
2014/11/12 Javascript
jQuery中append()方法用法实例
2014/12/25 Javascript
Angular.Js的自动化测试详解
2016/12/09 Javascript
three.js中文文档学习之如何本地运行详解
2017/11/20 Javascript
实例讲解JavaScript预编译流程
2019/01/24 Javascript
js中Generator函数的深入讲解
2019/04/07 Javascript
Node.js折腾记一:读指定文件夹,输出该文件夹的文件树详解
2019/04/20 Javascript
JavaScript 几种循环方式以及模块化的总结
2020/09/03 Javascript
[06:43]2018DOTA2国际邀请赛寻真——VGJ.Thunder
2018/08/11 DOTA
python里大整数相乘相关技巧指南
2014/09/12 Python
Python中尝试多线程编程的一个简明例子
2015/04/07 Python
Python的Twisted框架中使用Deferred对象来管理回调函数
2016/05/25 Python
Python操作mongodb的9个步骤
2018/06/04 Python
Pycharm更换python解释器的方法
2018/10/29 Python
python命令行工具Click快速掌握
2019/07/04 Python
matplotlib jupyter notebook 图像可视化 plt show操作
2020/04/24 Python
一款基于css3和jquery实现的动画显示弹出层按钮教程
2015/01/04 HTML / CSS
兰蔻法国官方网站:Lancôme法国
2020/02/22 全球购物
企业员工培训感言
2014/02/26 职场文书
电视购物广告词
2014/03/19 职场文书
教师先进工作者事迹材料
2014/05/01 职场文书
乌镇导游词
2015/02/02 职场文书
2015年社区平安建设工作总结
2015/05/13 职场文书
2016高考寄语或鼓励的话语
2015/12/04 职场文书
讲解Python实例练习逆序输出字符串
2022/05/06 Python