学习算法不奇怪,啊哈算法很哇塞!大家好,我是pythonitstream。今天我们来讲一下啊哈磊(原名纪磊)写的《啊哈算法》一书


目录

前言

一、桶排序是什么

二、实战应用

二、(1)、分析

二、(2)、代码

总结


前言

有一个困扰了我们多年的问题,就是如何排序。这听起来挺简单,但是从时间复杂度的角度上就不那么简单了。


一、桶排序是什么

桶排序是一个简单又快捷的排序,时间复杂度仅为O(N+M),是不是很快?

它的原理就是用一个列表,只要有一个数出现,就把相应索引值的值加一。等到打印的时候,再用一个循环,判断一下,如果值为0,那就不打印,否则打印那个数

二、实战应用

有一个班想让我们排序一下分数,他们的分数分别是65,99,81,79,100和94,那该怎么办呢?

二、(1)、分析

首先,分数是由大到小排序,并且满分是100分,所以创建一个大小为101的列表就可以了,这个列表就是那个“桶”。实践如下:

a=[0 for i in range(101)]

其次,读入数,搞一个循环,用来统计数。每当用户输入一个数时,对应的桶的索引值的值加一

。就是酱紫:

for j in range(6): #输入六个数result=int(input('请输入成绩:'))a[result]+=1 #相应的索引值的值加一

然后就是打印。打印时,要用一个嵌套循环。一个用来遍历桶,一个用来打印数字(桶里的值是多少,就打印多少遍)。因为我们是从大到小排序,所以我们要从6到0的range。实现如下:

for k in range(100,-1,-1): #从6到1的rangefor l in range(1,a[k]+1): #打印数print(k,end=' ')

二、(2)、代码

代码实现是酱紫的:

a=[0 for i in range(101)] #那个“桶”for j in range(6): #输入六个数result=int(input('请输入成绩:'))a[result]+=1 #相应的索引值的值加一for k in range(100,-1,-1): #从6到1的rangefor l in range(1,a[k]+1): #打印数print(k,end=' ')

请输入成绩:65

请输入成绩:99

请输入成绩:81

请输入成绩:79

请输入成绩:100

请输入成绩:94

100 99 94 81 79 65


总结

桶排序速度很快,但是也有弊端。

如果让你统计5.25这种小数怎么办?如果数是1 10000000 999 254325323呢?你是不是要做一个254325324个值的列表?请看下期——冒泡排序

啊哈算法——第一章第一节:桶排序相关推荐

  1. 自然语言和计算机语言二义性,二级C++精品课程第一章第一节计算机语言及其发展...

    计算机是一个有用的工具,它能做许多事情,例如矩阵计算.方程求解.辅助设计等.要让计算机解决某一个问题之前,必须先把求解问题的步骤描述出来,这便称之为算法.下面是一个一元二次方程求根的算法实例: ◇ 计 ...

  2. 软件构造 第一章第二节 软件开发的质量属性

    ​软件构造 第一章第二节 软件开发的质量属性 1.软件系统质量指标 External quality factors affect users 外部质量因素影响用户 Internal quality ...

  3. 初步使用计算机教案ppt,第一章 第一节 初识计算机程序(课件+教案+素材)

    第一章 第一节 初识计算机程序(课件+教案+素材) ==================资料简介====================== 第一节 初识计算机程序:28张PPT ~$第一节 认识智能 ...

  4. 第一章 第一节:Python基础_认识Python

    Python基础入门(全套保姆级教程) 第一章 第一节:Python基础_认识Python 1. 什么是编程 通俗易懂,编程就是用代码编写程序,编写程序有很多种办法,像c语言,javaPython语言 ...

  5. 《网络是怎样连接的》第一章第二节:向DNS服务器查询Web服务器的IP地址

    <网络是怎样连接的>第一章:浏览器生成消息 概述:这本书以 "从在浏览器输入网址,到屏幕显示出网页,当中到底发生了什么?"为疑问,探究其中的过程.本章讲的是浏览器怎么把 ...

  6. [转载] 令牌桶算法和漏桶算法python_排序算法(七):Bucket Sort 桶排序

    参考链接: 用Python进行存储桶Bucket Sort排序 Couting Sort 计数排序虽然快,但其只能对整数进行排序有一点的局限性.而 Bucket Sort 桶排序则没有这个限制.这里我 ...

  7. 粤教版小学认识计算机教案,粤教版八年级信息技术下册教案:第一章第一节初识计算机程序oc.pdf...

    WORD格式 可编辑 八级下 B版信息技术 VB课程全套教案(粤教版) 时间: 课题 <感受程序设计的魅--初识计算机程序> 一.教学内容分析和设计: 本节课教学内容为第二册下第一章感受程 ...

  8. 第一章 第一节 可充当主语的词类

    第一章 句子的构成 任何一个句子一定是由主语及动词构成 S+V 有时主语可以省略,而构成了祈使句.这种祈使句由原形动词(也称为动词不定式)引出. 祈使句变成否定形式时,要在原形动词前加Don't 第一 ...

  9. 高等数学精讲01 第一章第一节 函数

    第一章 函数,极限,连续 概要: 函数:高等数学研究的主要对象 极限(重点难点):用来研究函数的工具,重要概念都是极限用来定义的,连续,导数,定积分 连续性:研究的第一个基本形态 第一节 函数 主要内 ...

  10. Datawhale数据分析第一章第二节:Pandas基础

    复习:数据分析的第一步,加载数据我们已经学习完毕了.当数据展现在我们面前的时候,我们所要做的第一步就是认识他,今天我们要学习的就是了解字段含义以及初步观察数据. 1 第一章:数据载入及初步观察 1.4 ...

最新文章

  1. 什么是CommonJS?
  2. SpringMVC详细执行流程整理
  3. Html.RenderPartial使用三个参数
  4. mysql explicit_defaults_for_timestamp参数
  5. 【Java】为什么java构造函数的构造器只能在第一行写this() 或者super() ?
  6. xtrabackup mysql 5.1_mysql 5.1 选哪个 xtrabackup
  7. JAVA 获取系统环境变量
  8. Sequence I
  9. vue使用a标签下载文件_Vue a标签实现点击下载,下载图片、txt文件,不是直接打开的方式...
  10. 死链接处理,seo站长必会
  11. 工作到现在的一些感想
  12. 【杂学笔记-表观遗传学-updating】
  13. H3C交换机设备常用命令
  14. 嵌入式编程语言挑选的原则
  15. Word制作表格常用操作
  16. 若依图片上传到服务器,前端显示图片
  17. k8s高可用多节点master搭建
  18. 基于Java毕业设计疫情下的进出口食品安全信息管理系统源码+系统+mysql+lw文档+部署软件
  19. Android图片添加水印图片并把图片保存到文件存储
  20. bash shell 命令

热门文章

  1. python post 上传文件_Python脚本POST上传数据以及文件
  2. 有项目管理模板提供吗?(模板和管理工具对过程改进的帮助)
  3. win10电脑上计算机图标怎么删除,Win10删除此电脑多余软件图标的详细方法
  4. Android模拟地图gps定位
  5. nodejs+vue++Elementui漫画赏析网站系统源码
  6. 2022最新短视频去水印解析API接口支持各大小程序平台分享
  7. php起点小说小偷程序,PHP 简单的小偷程序
  8. AI革命,通往超级人工智能之路
  9. fortran95数组输出练习感悟
  10. STM32基于固件库学习笔记(7)I2C通讯协议时序(GPIO模拟协议时序完成MCU对24c02读写数据)