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操作xml文件详细介绍
Jun 09 Python
Python标准库之随机数 (math包、random包)介绍
Nov 25 Python
使用Python的urllib2模块处理url和图片的技巧两则
Feb 18 Python
Python外星人入侵游戏编程完整版
Mar 30 Python
Python获取SQLite查询结果表列名的方法
Jun 21 Python
python实现决策树、随机森林的简单原理
Mar 26 Python
Python实现SQL注入检测插件实例代码
Feb 02 Python
Python实现爬取马云的微博功能示例
Feb 16 Python
Pyecharts绘制全球流向图的示例代码
Jan 08 Python
Python文件操作基础流程解析
Mar 19 Python
Python高并发和多线程有什么关系
Nov 14 Python
详解tf.device()指定tensorflow运行的GPU或CPU设备实现
Feb 20 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
BBS(php & mysql)完整版(四)
2006/10/09 PHP
PHP实现时间轴函数代码
2011/10/08 PHP
smarty中英文多编码字符截取乱码问题解决方法
2014/10/28 PHP
PHP使用gmdate实现将一个UNIX 时间格式化成GMT文本的方法
2015/03/19 PHP
php 字符串中是否包含指定字符串的多种方法
2018/04/12 PHP
PHP的new static和new self的区别与使用
2019/11/27 PHP
javascript 内存回收机制理解
2011/01/17 Javascript
Js数组的操作push,pop,shift,unshift等方法详细介绍
2012/12/28 Javascript
Javascript检查图片大小不要让大图片撑破页面
2014/11/04 Javascript
node中socket.io的事件使用详解
2014/12/15 Javascript
javascript实现无限级select联动菜单
2015/01/02 Javascript
jQuery经过一段时间自动隐藏指定元素的方法
2015/03/17 Javascript
javascript封装简单实现方法
2015/08/11 Javascript
jQuery+PHP实现可编辑表格字段内容并实时保存
2015/10/09 Javascript
AngularJS中的过滤器filter用法完全解析
2016/04/22 Javascript
Bootstrap选项卡学习笔记分享
2017/02/13 Javascript
解决vue router组件状态刷新消失的问题
2018/08/01 Javascript
浅谈微信小程序flex布局基础
2018/09/10 Javascript
webpack4实现不同的导出类型
2019/04/09 Javascript
图解javascript作用域链
2019/05/27 Javascript
js中switch语句的学习笔记
2020/03/25 Javascript
Vue router传递参数并解决刷新页面参数丢失问题
2020/12/02 Vue.js
Phantomjs抓取渲染JS后的网页(Python代码)
2016/05/13 Python
Pandas 合并多个Dataframe(merge,concat)的方法
2018/06/08 Python
Python OOP类中的几种函数或方法总结
2019/02/22 Python
python3的url编码和解码,自定义gbk、utf-8的例子
2019/08/22 Python
详解Python图像处理库Pillow常用使用方法
2019/09/02 Python
浅析Django 接收所有文件,前端展示文件(包括视频,文件,图片)ajax请求
2020/03/09 Python
关于HTML5你必须知道的28个新特性,新技巧以及新技术
2012/05/28 HTML / CSS
大专生自荐信
2013/10/04 职场文书
财务负责人岗位职责
2015/02/03 职场文书
离职告别感言
2015/08/04 职场文书
导游词之南京夫子庙
2019/12/09 职场文书
python 爬取豆瓣网页的示例
2021/04/13 Python
React Fragment介绍与使用详解
2021/11/11 Javascript
vue实现列表垂直无缝滚动
2022/04/08 Vue.js