《啊哈算法》桶排序详解
时间:2022-07-26
本文章向大家介绍《啊哈算法》桶排序详解,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
1.什么是桶排序?
桶排序是一种排序算法,实际上并没有进行比较排序,而是借助了数组。
2.实现原理
假定有1-100个编号的桶(既定义一个长度为100的整型一维数组),每输入一个数字·就在对应的桶上插一个小旗(也就是对应下标的桶加1次),如果这个数字出现了n次就在对应桶上插n个小旗,当所有数输入完毕时,只需要从下标1开始找那些数字是1,如果是1就打印1次,是2就打印2次,是多少就打印多少次。
3.疑惑点
为什么我们没有比较大小就排序出来了呢?因为数组下标本身就是已经排好了,只要出现一次数就在对应下标上+1,然后遍历数组中那些大于1就行。但是判断大于1不能用if判断,如果用if如果数字出现了两个虽然下标对应的数已经大于1但是只会打印一次,会造成数据丢失的bug。
4.优缺点
缺点:
使用桶排序占用内存很大,若果需要排序的数字是1和10000这两个数,就必须定义10000个桶,因为必须在10000这个桶上插小旗;由于桶的标号只能是整数(数组下标原因)所以他并不能排序小数,只能排序整数,且如果有负数那么代码量将大大增加,效率不在那么高。
优点:
相比冒泡排序桶排序程序实现更加简单,而且效率也高了很多,由于冒泡排序的双层for在排序的数字很多时则会使效率变得很低。
5.桶排序c语言代码
#include<stdio.h>int main(){ int improt; //申明整型数组,相当于申明了100个桶[100] int array[100]; //用于接受键盘输入的数 for(int i=0;i<100;i++){ array[i] = 0; //把数组赋值为0,也就是每个桶都没被占用过 } for(int j=1;j<=5;j++){ scanf("%d",&improt); //循环录入要比较的5个数 array[improt]++; //输入的是数字几,就在对应桶上+1次,表示被占用了 } for(int k=0;k<100;k++){ //把数组拿出来看看,当然其中可能也有为0的数,国为没被占 for(int z= 0;z<array[k];z++){ //可能你想的是用if判断是不是1,但是如果此数字出现了两次呢? printf("%d",k); } } return 0;}
5.桶排序Java代码
public static void main(String[] args) { int[] source = new int[]{8,3,7,12,5,6,9}; bucketSort(source);}
public static void bucketSort(int[] array){ int[] reslut = new int[13]; for (int i = 0; i < array.length; i++) { reslut[array[i]]++; }
for (int i = 0; i < reslut.length; i++) { for (int j = 1; j <= reslut[i]; j++) { System.out.println(i); } }}
- 谈谈你最熟悉的System.DateTime[上篇]
- 12步轻松搞定Python装饰器
- 实用小工具,教你轻松转化Python通用数据格式
- 数据工程师常用的几个小工具(附python源代码)
- R语言的三种聚类方法
- 技能 | R语言的igraph画社交关系图示例
- 魔兽世界中招:一条命令行就能劫持你的游戏!
- R语言 apply函数家族详解
- 基于R语言的梯度推进算法介绍
- R语言数据可视化综合指南
- 关于CLR内存管理一些深层次的讨论[上篇]
- 关于CLR内存管理一些深层次的讨论[下篇]
- Python渗透工具的架构探讨
- 提供第三种代码生成方式——通过自定义BuildProvider为ASP.NET提供代码生成
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- count_if函数的用法
- Codeforces Round #633 (Div. 2) A ~~C
- AtCoder Beginner Contest 162 A~~D
- P1036 选数
- P1028 数的计算
- P1598 垂直柱状图
- 递归解决全排列问题
- Codeforces Round #622 (Div. 2)A~~C1
- AtCoder Beginner Contest 156 A~~D
- AtCoder Beginner Contest 155
- Codeforces Round #620 (Div. 2) A~~D
- DFS+记忆化搜索 -- 简单练习
- AtCoder Beginner Contest 154
- map + pair用法练习
- 蛇形矩阵