计数排序与桶排序python实现

计数排序与桶排序python实现

计数排序

计数排序原理:

  • 找到给定序列的最小值与最大值

  • 创建一个长度为最大值-最小值+1的数组,初始化都为0

  • 然后遍历原序列,并为数组中索引为当前值-最小值的值+1

  • 此时数组中已经记录好每个值的数量,自然也就是有序的了

例如:

计数排序实现

下面为列表的计数排序


def count_sort(s):"""计数排序"""# 找到最大最小值min_num = min(s)max_num = max(s)# 计数列表count_list = [0]*(max_num-min_num+1)# 计数for i in s:count_list[i-min_num] += 1s.clear()# 填回for ind,i in enumerate(count_list):while i != 0:s.append(ind+min_num)i -= 1if __name__ == '__main__':a = [3,6,8,4,2,6,7,3]count_sort(a)print(a)

计数排序的缺点

当数值中有非整数时,计数数组的索引无法分配

桶排序

桶排序原理:

  • 桶排序与计数排序类似,但可以解决非整数的排序

  • 桶排序相当于把计数数组划分为按顺序的几个部分

  • 每一部分叫做一个桶,它来存放处于该范围内的数

  • 然后再对每个桶内部进行排序,可以使用其他排序方法如快速排序

  • 最后整个桶数组就是排列好的数据,再将其返回给原序列

举例:

桶排序实现

这里选择桶的数量为序列元素个数+1,范围分别是5等分与最大值,和上面那个图一样。

具体问题应该按照具体情况进行桶划分

这里桶内部排序直接调用了sorted


def bucket_sort(s):"""桶排序"""min_num = min(s)max_num = max(s)# 桶的大小bucket_range = (max_num-min_num) / len(s)# 桶数组count_list = [ [] for i in range(len(s) + 1)]# 向桶数组填数for i in s:count_list[int((i-min_num)//bucket_range)].append(i)s.clear()# 回填,这里桶内部排序直接调用了sortedfor i in count_list:for j in sorted(i):s.append(j)if __name__ == '__main__':a = [3.2,6,8,4,2,6,7,3]bucket_sort(a) print(a) # [2, 3, 3.2, 4, 6, 6, 7, 8]

总结

计数排序与桶排序都是以牺牲空间换时间,虽然很快,但由于可能产生大量的空位置导致内存增大,尤其是计数排序。

桶排序中尽量使每个桶中的元素个数均匀分布最好

转载于:https://www.cnblogs.com/sfencs-hcy/p/10612422.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/536610.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

perl脚本执行linux命令行,Perl调用shell命令方法小结

一、systemperl也可以用system调用shell的命令,它和awk的system一样,返回值也是它调用的命令的退出状态.代码如下:[rootAX3sp2 ~]# cat aa.pl#! /usr/bin/perl -w$file "wt.pl";system("ls -l wt.pl");$result system "ls -l $file";print &qu…

JVM快速调优手册02:常见的垃圾收集器

2019独角兽企业重金招聘Python工程师标准>>> 如果说收集算法是内存回收的方法论,那么垃圾收集器就是内存回收的具体实现。 Java虚拟机规范中对垃圾收集器应该如何实现并没有任何规定,因此不同的厂商、不同版本的虚拟机所提供的垃圾收集器都可…

linux运维平台工具,Linux运维自动化工具 Kickstart

简介:批量安装操作系统工具之 Kickstart ,RedHat 早前推出的产品( 不多说了,现在都玩 Cobbler 啦,见 http://www.linuxidc.com/Linux/2016-04/129977.htm )。测试环境:CentOS 6.6 x86_64 minimal一、安装软件包shell &…

PostgreSQL 并行查询概述

2019独角兽企业重金招聘Python工程师标准>>> PostgreSQL从9.6版本开始加入并行查询,并在PostgreSQL10和PostgreSQL11分别做了大量加强工作。下面从: 何时启用并行查询功能并行查询是如何工作的worker进程数量越多,查询性能越高吗三…

linux下得到date命令,linux下date命令获得今天日期的用法

1。获取今天日期的各类用法:oracle[roottest ~]# date %Y_%m_%d2016_05_22[roottest ~]# date %Y_%m_%d2016_05_22ide[roottest ~]# date "%Y_%m_%d"2016_05_22[roottest ~]# date %Y_%m_%d2016_05_22[roottest ~]# date "%Y_%m_%d"2016_05_22i…

Quarkus:一个Kubernetes原生Java框架

Red Hat发布了Quarkus,这是一个为GraalVM和OpenJDK HotSpot量身定制的Kubernetes原生Java框架。Quarkus的目标是使Java成为Kubernetes和无服务器环境中的领先平台,为开发人员提供统一的反应式和命令式编程模型。 Quarkus利用Java开发人员使用的一系列库&…

分区安装linux,怎样安装Linux?

我的机子上装了win2000,想装个Linux可是在安装时,竟然D 、E盘都不见了,win2000也进不去了我只得重装2000,现在我都不敢装Linux了请高手指点!|你最好用PQMAGIC先分区,大约2。5G空间就够了,可以参…

linux scp传输文件命令

scp -r /opt/test root192.168.2.105:/opt 转载于:https://www.cnblogs.com/LynnChen/p/10620576.html

pg10 10.3 1 linux64,Install Postgresql 10 In Ubutnu 16.04 LTS

PostgreSQL数据库是一个高性能的全功能的开源关系型数据库,这里讲解一下如何在Ubuntu 16.04 LTS 下安装 PostgreSQL 10。添加软件源wget -q -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -sudo sh -c echo "deb http://apt.po…

nginx能访问html静态文件但无法访问php文件

nginx.conf中红框部分修改成你的实际网站根目录转载于:https://www.cnblogs.com/IT-Crowd/p/10626549.html

linux虚拟光驱挂载方法,Linux操作系统下虚拟光驱(iso)的挂载

1、挂载iso文件一般查看iso文件内容,只需要:#mount -t iso9660 -o loop xxx.iso /mnt/cdrom就可以在/mnt/cdrom下看到xxx.iso的内容。2、复制光盘为iso镜像#dd if/dev/hdb ofxxx.iso或者#cp /dev/cdrom xxx.iso3、虚拟iso为设备#rm -rf /dev/cdrom //删除…

[深度概念]·K-Fold 交叉验证 (Cross-Validation)的理解与应用

个人主页--> xiaosongshine.github.io/ 1.K-Fold 交叉验证概念在机器学习建模过程中,通行的做法通常是将数据分为训练集和测试集。测试集是与训练独立的数据,完全不参与训练,用于最终模型的评估。在训练过程中,经常会出现过拟合…

linux mariadb 升级,linux mariadb

linux mariadb转载 一 安装下载mariaDB MariaDB-5.5.29-rhel5-x86_64-common.rpm 和MariaDB-5.5.29-rhel5-x86_64-server.rpm 包,MariaDB-5.5.29-rhel5-x86_64-client.rpm2.然后再http.//yum。mariadb。org/ 找到 RPM-GPG-KEY-MariaDB 这个PGP文件,把文件放入到/etc…

Linux Note

日期:2019/3/31 内容:Linux学习笔记 一、Linux命令 ls -l 操作效果 第一列:文件权限 一共10位。 01(r)2(w)3(x)4(r)5(w)6(x)7(r)8(w)9(x)文件类型文件所有者权限 usr权限,u权限文件所有者所属组成员的权限 group权限,g…

linux查看usb鼠标是否启动,Linux USB鼠标驱动注解及测试

参考2.6.14版本中的driver/usb/input/usbmouse.c。鼠标驱动可分为多个部分:驱动加载部分、probe部分、open部分、urb回调函数处理部分。下文阴影部分为注解。一、 驱动加载部分static int __init usb_mouse_init(void){int retval usb_register(&usb_mouse_…

退役前的最后的做题记录upd:2019.04.04

考试考到自闭&#xff0c;每天被吊打。 还有几天可能就要AFO了呢。。。 Luogu3602&#xff1a;Koishi Loves Segments 从左向右&#xff0c;每次删除右端点最大的即可。 [HEOI2014]南园满地堆轻絮 答案一定是 \(\lceil \frac{max_{1\le i < j \le n}(a_i-a_j)}{2} \rceil\)。…

linux ssh-add,linux – 如何使ssh-add从文件读取密码?

根据您的发行版本和ssh-add的版本,您可以使用或不使用以这种方式从stdin读取密码的ssh-add的-p选项&#xff1a;cat passfile | ssh-add -p keyfile如果这不工作,您可以使用Expect,Unix工具使交互式应用程序非互动.你必须从你的包管理器安装它.我为你准备了一个工具.只需将内容…

linux nginx F配置,linux下nginx的安装及配置

1、安装nginx前&#xff0c;咱们首先要确保系统安装了g、gcc、openssl-devel、pcre-devel和zlib-devel软件&#xff0c;可经过如图所示命令进行检测,若是以安装咱们能够经过图二所示卸载&#xff1a;linuxyum install gcc-cyum -y install zlib zlib-devel openssl openssl--de…

你缺啥,你缺一个得力的办公软件

其实你缺啥我都知道&#xff0c;但是&#xff0c;我又不能给你发工资&#xff0c;还得你自己努力工作才行。不过我可以给你分享几款好用的办公软件&#xff0c;对你在进行有效率的办公会有很大帮助的。曲奇办公是一款以文档为载体的企业办公管理应用。帮助企业快速实现业务标准…

C语言做一个表格的程序,用C语言画个简单表格

今天见到个题目&#xff0c;就把他做了&#xff0c;题目如下&#xff1a;在图形环境中很容易做出漂亮的表格。但在控制台环境中就比较困难了。有的时候可以用一些符号大略地模拟&#xff1a;(word文档中可能不整齐&#xff0c;拷贝到记事本中看)-------------|abc |xyztt|…