算法学习之四:桶排序
来源:互联网 发布:知天气哪个版本好 编辑:程序博客网 时间:2024/06/18 07:59
桶排序概念:
桶排序是在已知数据的范围的条件下,创建若干个桶,根据相应的比较规则将待排数据落入各个对应的桶中,最后扫描桶来实现排序。
这个概念是从http://www.cnblogs.com/hapjin/p/5534262.html摘取的。
桶排序更接近于一种标记,当某个数出现了,就在对应的桶中mark一下。
举例子:
比如一个数组:3 ,5 , 3 , 1 , 2
我们就要准备6个桶:bucket[0] ~bucket[5]。桶中初始数据都为0。
遍历数组,拿到3,就在3号桶中放一根火柴棍,遍历到5,就在5号桶中放一根火柴棍,又遍历到3,就又在3号桶中放一根火柴棍………….
用代码实现桶排序:
比如对int[] list = {9,5,12,45,3,5,4,8,22,10,3} 排序
public class BucketSort { public static int[] bucketSort(){ int[] list = {9,5,12,45,3,5,4,8,22,10,3}; int [] bucket = new int[46]; //初始化桶中的数据,都为0 for(int i =0;i<bucket.length;i++){ bucket[i] = 0; } for(int j =0;j<list.length;j++){ for(int i =0;i<bucket.length;i++){ if(list[j]==i){ //将list中的数据在桶中标记 bucket[i]++; break; } } } return bucket; }}
测试:
int[] list4 = BucketSort.bucketSort(); for(int i = 0;i<list4.length;i++){ //遍历桶中所有数据 if(list4[i]!=0){ Log.e("hxy","i="+i+" 出现次数:"+list4[i]); } //查找所有重复的元素: if(list4[i]>1){ Log.e("hxy","重复元素为:"+i); } }
总结:
利用桶排序,还可以查找某个元素出现的次数,哪些是重复的元素,关键点是桶排序的时间复杂度是:当有个N个数需要排序,需要准备M个桶,时间复杂是N+M,当M =N的时候,复杂度就是N,这是一种非常快速的排序方法。但是,桶排序在很多情况下都不适用,缘于数据过于离散分布。比如1,5, 1000。对这3个数排序,用桶排序的话,要准备1001个桶,非常占用内存。
0 0
- 算法学习之四:桶排序
- 算法学习之排序算法(四)(希尔排序)
- 基础算法之四--排序:之桶排序
- 算法导论学习笔记之四--堆排序
- 四种排序算法学习
- 一句话明白排序算法之四——桶排序
- 算法四之冒泡排序
- 算法四之冒泡排序
- 排序算法之四 Shell排序
- 排序算法之四归并排序
- 蛙步学排序算法之四 - 希尔排序
- 【算法-排序之四】希尔排序
- 【算法-排序之四】希尔排序
- 排序算法之四--堆排序
- 图解排序算法(四)之归并排序
- 图解排序算法(四)之归并排序
- 图解排序算法(四)之归并排序
- 排序算法四之归并算法
- 1039: 计算1977!*
- 西加云杉700E设备AAA认证目录
- Pandas GroupBy对象
- Android音乐播放模式切换-外放、听筒、耳机
- LintCode 64 合并排序数组 II
- 算法学习之四:桶排序
- css的行高Line Height属性
- [教程] IE6下Png透明最佳解决方案 …
- html中自动换行标记[转]
- DIV布局的几个疑问[整理]
- Windows Server 2003 SP2无法安装解决方法(密钥无效)
- [转]关于取消“黑莓桌面管理器连接…
- Visual.Studio程序员箴言 - 笔记[…
- Web开发者文档和手册