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使用django获取用户IP地址的方法
May 11 Python
python变量不能以数字打头详解
Jul 06 Python
利用python程序生成word和PDF文档的方法
Feb 14 Python
python 把列表转化为字符串的方法
Oct 23 Python
pygame实现雷电游戏雏形开发
Nov 20 Python
python学习——内置函数、数据结构、标准库的技巧(推荐)
Apr 18 Python
对pyqt5之menu和action的使用详解
Jun 20 Python
python实现的自动发送消息功能详解
Aug 15 Python
keras中的backend.clip用法
May 22 Python
Python3爬虫带上cookie的实例代码
Jul 28 Python
Python网络编程之ZeroMQ知识总结
Apr 25 Python
python之PySide2安装使用及QT Designer UI设计案例教程
Jul 26 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
Terran剧情介绍
2020/03/14 星际争霸
超级简单的发送邮件程序
2006/10/09 PHP
第四节--构造函数和析构函数
2006/11/16 PHP
php下使用SMTP发邮件的代码
2008/01/10 PHP
火车头discuz6.1 完美采集的php接口文件
2009/09/13 PHP
PHP下通过系统信号量加锁方式获取递增序列ID
2009/09/25 PHP
php正则表达式(regar expression)
2011/09/10 PHP
php常用hash加密函数
2014/11/22 PHP
PHP正则表达式函数preg_replace用法实例分析
2020/06/04 PHP
jQuery为iframe的body添加click事件的实现代码
2011/04/07 Javascript
Jquery 点击按钮显示和隐藏层的代码
2011/07/25 Javascript
在jQuery中 常用的选择器介绍
2013/04/16 Javascript
学习JavaScript设计模式之迭代器模式
2016/01/19 Javascript
JavaScript ES6的新特性使用新方法定义Class
2016/06/28 Javascript
js 获取站点应用名的简单实例
2016/08/18 Javascript
一句jQuery代码实现返回顶部效果(简单实用)
2016/12/28 Javascript
bootstrapTable+ajax加载数据 refresh更新数据
2018/08/31 Javascript
JS端基于download.js实现图片、视频时直接下载而不是打开预览
2020/05/09 Javascript
Python模拟登录验证码(代码简单)
2016/02/06 Python
python中Apriori算法实现讲解
2017/12/10 Python
python解决js文件utf-8编码乱码问题(推荐)
2018/05/02 Python
如何使用python爬虫爬取要登陆的网站
2019/07/12 Python
在CentOS7下安装Python3教程解析
2020/07/09 Python
Python urllib request模块发送请求实现过程解析
2020/12/10 Python
Python 无限级分类树状结构生成算法的实现
2021/01/21 Python
h5页面唤起app如果没安装就跳转下载(iOS和Android)
2020/06/03 HTML / CSS
美国电视购物:QVC
2017/02/06 全球购物
银行演讲稿范文
2014/01/03 职场文书
销售主管岗位职责
2014/02/08 职场文书
学校安全防火方案
2014/06/07 职场文书
影视后期实训报告
2014/11/05 职场文书
工作自我评价范文
2019/03/21 职场文书
Mysql - 常用函数 每天积极向上
2021/04/05 MySQL
eclipse创建项目没有dynamic web的解决方法
2021/06/24 Java/Android
Nginx内网单机反向代理的实现
2021/11/07 Servers
Python探索生命起源 matplotlib细胞自动机动画演示
2022/04/21 Python