第1节、一个萝卜一个坑——计数排序
1、栗子
期末成绩出来了,大白考了第4名,得了6 分,总分10分,回家妈妈打他了一顿:你看邻居家的孩子考得多好呀!
家长会上,老师要求大家成绩从低到高排序,前三名奖励小红花,大家如何排队呢?
2、准备工作
一个萝卜一个坑,首先要准备很多个坑,之后把对应的萝卜放进去,之后数一下那个坑里有萝卜就OK了!
我们可以使用一个一维数组解决这个问题。
数组的长度为分数的范围,这里就是从0到10,等看完了就知道为什么要这样了。
首先申请一个长度为11的数组a[11],数据范围为a[0]~a[10],将数组全部初始化为0,表示这里没有人得过。
int a[11]={0};
开始读取每个人的分数(6,9,8,7,5),第一个人的分数为6,将a[6]设置为1,表示有一个人得了6分,同理将a[9]设置为1,表示有一个人得了9分……其他同理
每个人的分数处理完成之后,遍历下这个数组,如果数据a[i]为0,表示没有人得i分,否认就有,输出i就可以了。
3、代码
这里是完整代码,使用C语言
//输入:6 9 8 7 5
//输出:9 8 7 6 5
#include <stdio.h>
int main()
{int a[11], i, j, t;//数组初始化为0for (i = 0;i <= 10;i++)a[i] = 0; //计数排序,计算每个数出现的次数,之后排序for (i = 1;i <= 5;i++){scanf("%d", &t);a[t]++; }//输出结果for (i = 0;i <= 10;i++)for (j = 1;j <= a[i];j++)printf("%d ", i);//等待输入,避免最终结果一闪而过getchar();return 0;
}
4、优化
该算法于1954年由 Harold H. Seward 提出,距今已经N多年了,时间上只需要对数组进行一次遍历,复杂度O(n),时间表现很优秀;
空间上需要分配0~最大数据的空间,如果输入数据为(1,2,3,10000),只有4个数,却要分配a[10001],这么多的空间!
计数排序就是用空间换时间!大量的空间占用当然就存在优化的空间!
第1节、一个萝卜一个坑——计数排序相关推荐
- 啊哈添柴挑战Java1652. 桶排序练习(一个萝卜一个坑)
啊哈添柴--挑战 1652. 桶排序练习(一个萝卜一个坑) import java.util.Scanner;/*** @author yinglongwu*/ //1652. 桶排序练习(一个萝卜一 ...
- 排序算法:桶排序、计数排序、基数排序
相关博客: 排序算法:冒泡排序.插入排序.选择排序.希尔排序 排序算法:归并排序.快速排序 排序算法:桶排序.计数排序.基数排序 排序算法:堆排序 十大排序算法小结 这篇博客将主要介绍三种时间复杂度是 ...
- 算法导论-排序(四)计数排序(线性时间排序)
目录 1.计数排序介绍 2.流程图 3.代码实现 4.性能分析 5.参考资料 内容 1.计数排序介绍 什么是计数排序? 计数排序是一种特殊的排序算法,之前介绍的排序算法需要对数进行两两比较,效率下界为 ...
- 排序下---(冒泡排序,快速排序,快速排序优化,快速排序非递归,归并排序,计数排序)
排序上 排序上 交换类排序 基本思想:所谓交换,就是根据序列中两个记录键值的比较结果来对换这两个记录在序列中的位置,交换排序的特点是:将键值较大的记录向序列的尾部移动,键值较小的记录向序列的前部移动. ...
- ❤️万字总结八大排序:冒泡排序,选择排序,插入排序,堆排序,希尔排序,归并排序,计数排序❤️
目录 主要排序算法性能对比 冒泡排序 选择排序 插入排序 堆排序 希尔排序 快速排序 Hoare版 挖坑版 前后指针法 归并排序 计数排序 海量数据的排序问题 主要排序算法性能对比 冒泡排序 各位同学 ...
- 十大经典排序算法(图解与代码)——冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序、计数排序、桶排序、基数排序(Python and Java)
排序 重新排列表中的元素,使表中的元素按照关键字递增或者递减 内部排序: 指在排序期间,元素全部存放在内存中的排序 外部排序: 指在排序期间元素无法全部同时存放在内存中,必须在排序的过程中根据要求不断 ...
- C语言:一维数组—一个萝卜一个坑问题
一维数组逻辑挑战-一个萝卜一个坑问题 从键盘输入0-9的五个数,然后输出0-9中那些没有出现过的数 一维数组初始化的两种方式: 1: for (i = 0; i < 10; i++) { a[i ...
- 快速排序 - 一个萝卜一个坑
快速排序 - 一个萝卜一个坑 快速排序算法的通俗理解 quick_sort简单来说就是一种用到递归的分治算法,每一个递归基就是采用拔萝卜填坑的思想.假设有一排大小不同的萝卜,我们想要把萝卜从小到大挖坑 ...
- c++十大排序之计数排序
活动地址:CSDN21天学习挑战赛 正文 At first,我们先look一张我从某文章*的表格,来了解一下这几大算法 图都看了,那我也不得不提一嘴,图里面的东西了 算法效率 在一个算法设计完 ...
最新文章
- 从numpy开启Python数据科学之旅
- windows 下mysql的安装于使用(启动、关闭)
- Oracle 11gR2构建RAC之(3)--安装grid前环境检测
- c# 线程间操作无效: 从不是创建控件“”的线程访问它,用托管来解决
- js/jquery学习笔记
- Java程序设计第三次作业
- 如果有机会,买一个能够兼容多终端的大屏幕是很重要的
- 什么是对象?——摘自《设计模式精解》(熊节 译,清华大学出版社,2004.12,P20)...
- 5 拦截器拦截请求路由_手写简易版axios拦截器,实现微信小程序wx.request的封装与拦截...
- Python 抓取图片
- 5个小技巧让你写出更好的 JavaScript 条件语句
- 「每天一道面试题」谈String和StringBuffer、StringBuilder区别
- 语音性别识别_语音识别识别性别_语音文字识别 - 云+社区 - 腾讯云
- Elastic Search Java Api 创建索引结构,添加索引
- 【优化布局】基于matlab GUI遗传算法求解PCB元器件布局优化问题【含Matlab源码 694期】
- linux系统日志设置
- 易基因 - 外泌体let-7d-3p和miR-30d-5p作为宫颈癌及其癌前病变无创筛查的诊断标志物|早期筛查
- 怎样更改网站服务器的ip地址,如何更改您的服务器IP地址
- 利用大智慧DDE数据生成每只股票的历史数据文件(SQLServer2005)
- 彩信发送失败原因是什么?如何解决?