桶排序:
 * 计数排序适合小范围的大量重复元素,而桶排序适合区间内尽可能随机的元素
 * 它的思想是:

* 把数据存在的区间划分为小的区间,就像桶一样,这些在一个桶中的数据在桶内排好序,再合并成排序后的元素

如果大家知道散列表的拉链法,就可以大致的明白这个桶排序是一个什么样子的状态了.

这里,我是用了我自定义的有序单链表来保证每个桶内的元素有序,如果有疑问,可以参考这篇博客:http://blog.csdn.net/weixin_35757704/article/details/78005383

全部代码:

package com.sort;import com.list.OrderedList;/*** 桶排序:* 计数排序适合小范围的大量重复元素,而桶排序适合区间内尽可能随机的元素* 它的思想是:* 把数据存在的区间划分为小的区间,然后将这些数据在小区间内排好序,再合并成排序后的元素*/
public class BucketSort {public static int[] bucketSort(int[] arr) {//找到最大值与最小值,得到分布的区间int min = arr[0];int max = arr[0];for (int anArr : arr) {if (anArr > max) {max = anArr;} else if (anArr < min) {min = anArr;}}//得到最大值后,就可以划分区间了,这里我把它分为10个区间int part = 10;//这里对step进行改造,防止数组下标越界while ((max - min) % part != 0) {max += 1;}int step = (max - min) / part;return bucketSort(arr, step, part);}private static int[] bucketSort(int[] arr, int step, int part) {OrderedList[] lists = new OrderedList[part];  //开辟新的数组空间,用来保存链表for (int i = 0; i < arr.length; i++) {lists[i] = new OrderedList();}//现在开始遍历整个待排数组,并且把它们有序的排在 lists 中for (int anArr : arr) {lists[anArr / step].insert(anArr);}//输出int index = 0;int[] resultArr = new int[arr.length];for (int i = 0; i < arr.length; i++) {int count = lists[i].getCount();for (int j = 0; j < count; j++) {resultArr[index] = lists[i].popFirst();index++;}}return resultArr;}
}

这种排序算法实现起来比较繁琐,因此我在编写算法的时候总是感觉某些地方不太合适,但是这也是一种新的思想,值得学习

排序算法(7)----桶排序相关推荐

  1. 排序算法:桶排序、计数排序、基数排序

    相关博客: 排序算法:冒泡排序.插入排序.选择排序.希尔排序 排序算法:归并排序.快速排序 排序算法:桶排序.计数排序.基数排序 排序算法:堆排序 十大排序算法小结 这篇博客将主要介绍三种时间复杂度是 ...

  2. 排序算法之--桶排序(桶,像桶一样的排序,听起来很有趣哦0。0)

    排序算法之--桶排序 桶排序的工作的原理是将数组分到有限数量的桶子里,而这个有限数量是指多少个呢? 不急,容我细细道来:我们可以先求出这个数组的最大值和最小值,那么桶的数量就是max-min+1咯 为 ...

  3. 常用排序算法(八)桶排序

    桶排序 概要 本章介绍排序算法中的桶排序.内容包括: 1. 桶排序介绍 2. 桶排序图文说明 3. 桶排序实现 3.1  桶排序C实现 3.2  桶排序C++实现 3.3  桶排序Java实现 转载请 ...

  4. c语言桶排序,排序算法之——桶排序

    这是本人的第一篇随笔,为的是分享学习经验,和大家讨论一些算法,以便取得些许进步,也是对学习的总结. 话不多说,下面我会用图文的方式向各位介绍桶排序. 1.主要思想: 桶排序的大体思路就是先将数组分到有 ...

  5. 排序算法_桶排序(箱排序)

    一.算法描述 假设有一组长度为N的待排关键字序列K[1....n]. 首先将这个序列划分成M个的子区间(桶). 然后基于某种映射函数 ,将待排序列的关键字k映射到第i个桶中(即桶数组B的下标 i) , ...

  6. 经典白话算法之桶排序

    最快最简单的排序--桶排序 在我们生活的这个世界中到处都是被排序过的.站队的时候会按照身高排序,考试的名次需要按照分数排序,网上购物的时候会按照价格排序,电子邮箱中的邮件按照时间排序--总之很多东西都 ...

  7. java 桶排序_[图解] 桶排序

    桶排序是一种排序的思想,其实现包括计数排序和基数排序两种,冒泡排序.选择排序.插入排序.归并排序.快速排序和堆排序都是基于比较的排序,而桶排序提出了一种新的思路,即基于数据状态的排序. 1. 桶排序的 ...

  8. 【每日算法】桶排序算法

    1)算法简介 桶排序 (Bucket sort)或所谓的箱排序,是一个排序算法,工作的原理是将数组分到有限数量的桶子里.每个桶子再个别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排序 ...

  9. 排序算法之计数排序、基数排序和桶排序

    转自:http://www.cnblogs.com/ttltry-air/archive/2012/08/04/2623302.html 计数排序,基数排序,桶排序等非比较排序算法,平均时间复杂度都是 ...

最新文章

  1. 成功解决ImportError: [joblib] Attempting to do parallel computing without protecting your import on a sy
  2. websocket后台推送数据
  3. 论文浅尝 - AAAI2020 | 通过知识库问答改善知识感知对话生成
  4. 【每日SQL打卡】​​​​​​​​​​​​​​​DAY 9丨有趣的电影【难度简单】
  5. Redis工作笔记-Sorted-Sets类型
  6. 谁动了你的主机-Windows“唤醒”和“开机”时自动拍照-狩猎者项目
  7. c#截取后几位_C#几种截取字符串的方法小结
  8. Java 数组类型转字符串类型
  9. Java 12 生字符串字面量
  10. CTF_ CRYPTO(Cryptography)_密码学/密码编码学
  11. 计算机指令的操作码和地址,操作码和地址码
  12. python股票交易接口源代码分享
  13. 微信单删和互删有什么区别?
  14. 温德姆酒店集团计划今年大中华区新开超过100家酒店
  15. 离线强化学习(Offline RL)系列3: (算法篇)策略约束 - BRAC算法原理详解与实现(经验篇)
  16. Spring系列学习之Spring Cloud Task App Starters 微服务任务进程可执行程序
  17. Linux C 编程内存泄露检测工具(二):memwatch
  18. 软件工程--面向对象的分析和设计方法
  19. Windows平台下搭建Qt编译环境(VS2008)
  20. CSS学习笔记2字体属性和文本属性

热门文章

  1. python 多核并行计算_手把手 | 嫌Python太慢?并行运算Process Pools三行代码给你4倍提速!...
  2. h5+js调取相机做取景框_Ps绘制超复杂逼真相机图标
  3. java access 不在本地_线上的java项目访问不到线上数据库,但是这个数据库我本地可以连接到,求解...
  4. 计划任务 crontab、at
  5. 二叉树的深度和广度优先搜索算法
  6. C算法编程题(七)购物
  7. Visual Studio 2015开发Android App启动调试始终无法完成应用部署的解决方案
  8. Sql Server查询性能优化之走出索引的误区
  9. 图解金山网盾3.6下载保护实现原理
  10. 本期期刊主题:ASP.NET技术与JavaScript技巧,包括控件等