桶排序 (详细图解)

这篇具有很好参考价值的文章主要介绍了桶排序 (详细图解)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、桶排序

        桶排序(Bucket sort)或所谓的箱排序,是一个排序算法,工作的原理是将数组分到有限数量的桶里。每个桶再个别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排序),最后依次把各个桶中的记录列出来记得到有序序列。桶排序是鸽巢排序的一种归纳结果。当要被排序的数组内的数值是均匀分配的时候,桶排序使用线性时间(Θ(n))。但桶排序并不是比较排序,他不受到O(n log n)下限的影响。

二、桶排序原理

        核心思想:就是将大问题化小(分治思想)

(1)例如:数组:

(2)观察知:数组的元素分布在(0~50)之间,我们可以将其分隔成五个区间分辨是[0~9],[19~19],[20~29],[30~39],[40~49];(桶的个数根据题意自定,只需确定好每个桶的存储范围就好;并非桶越多越好,也并非越少越好总之适当就好);

(3)这五个区间看做五个桶;分别存放符合范围的数字;

(4)将这五个区间分别排序,再输出;

桶排序,排序算法,数据结构,算法

三、代码实现


import java.util.ArrayList;

public class BucketSort {

	public static void main(String[] args) {

		int[] arr = { 1, 45, 32, 23, 22, 31, 47, 24, 4, 15 };
		bucketsort(arr);

	}

	public static void bucketsort(int[] arr) {
		ArrayList bucket[] = new ArrayList[5];// 声明五个桶
		for (int i = 0; i < bucket.length; i++) {
			bucket[i] = new ArrayList<Integer>();// 确定桶的格式为ArrayList
		}
		for (int i = 0; i < arr.length; i++) {
			int index = arr[i] / 10;// 确定元素存放的桶号
			bucket[index].add(arr[i]);// 将元素存入对应的桶中
		}
		for (int i = 0; i < bucket.length; i++) {// 遍历每一个桶
			bucket[i].sort(null);// 对每一个桶排序
			for (int i1 = 0; i1 < bucket[i].size(); i1++) {// 遍历桶中的元素并输出
				System.out.print(bucket[i].get(i1) + " ");
			}
		}
	}

}

输出结果:

桶排序,排序算法,数据结构,算法

 文章来源地址https://www.toymoban.com/news/detail-680940.html

到了这里,关于桶排序 (详细图解)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【数据结构】图解八大排序(下)

    在上一篇文章中,我们已经学习了五种排序算法,还没看过的小伙伴可以去看一下:传送门 今天要讲的是八大排序中剩下的三种,这三种排序算法用的是非常多的,需要好好掌握。 下面介绍的排序算法均以排升序为例。 快排的思想 是分治,就是选定一个基准值,使这个值的

    2024年02月17日
    浏览(48)
  • 【数据结构】- 排序(详细介绍几种排序算法!!!*直接插入排序,*希尔排序,*选择排序,*堆排序,*冒泡排序,*快速排序,*归并排序)

    排序无处不在,所谓排序,就是使一串记录,按照其中的某个或某些的大小,递增或递减的排列起来的操作。 内部排序 :数据元素全部放在内存中的排序。 外部排序 :数据元素太多不能同时放在内存中,根据排序过程的要求不能在内外存之间移动数据的排序。 今天

    2024年01月20日
    浏览(62)
  • 数据结构:手撕图解七大排序(含动图演示)

    插入排序分为直接插入排序和希尔排序,其中希尔排序是很值得学习的算法 希尔排序的基础是直接插入排序,先学习直接插入排序 直接插入排序类似于打扑克牌前的整牌的过程,假设我们现在有2 4 5 3四张牌,那么应该怎么整牌? 方法很简单,把3插到2和4中间,这样就完成了

    2024年02月15日
    浏览(51)
  • 数据结构 堆——详细动画图解,形象理解

    📚lovewold少个r博客主页 ​➡️栈和队列博客传送门 🌳 参天大树充满生命力,其根深叶茂,分枝扶疏,为我们展示了数据分治的生动形态 🌳 树 树的常见概念 📒树的表示 二叉树 一棵二叉树是结点的一个有限集合,该集合: 📲二叉树的基本类型 🌲满二叉树(完美二叉树)

    2024年02月08日
    浏览(46)
  • 数据结构 —— 双向链表(超详细图解 & 接口函数实现)

    数据结构 —— 顺序表 数据结构 —— 单链表 数据结构 —— 双向链表 数据结构 —— 队列 数据结构 —— 栈 数据结构 —— 堆 数据结构 —— 二叉树 数据结构 —— 八大排序 数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元

    2024年02月11日
    浏览(42)
  • 【C++图解专栏】手撕数据结构与算法,探寻算法的魅力

    ✍个人博客:https://blog.csdn.net/Newin2020?spm=1011.2415.3001.5343 📣专栏定位:为 0 基础刚入门数据结构与算法的小伙伴提供详细的讲解,也欢迎大佬们一起交流~ 📚专栏简介:在这个专栏,我将带着大家一起用 C++ 手撕基础的数据结构与算法,每一讲都有详细的讲解,29 篇文章共

    2024年02月09日
    浏览(59)
  • 【算法基础】数据结构| 单链表+双链表 代码实现+图解+原理

    博主简介: 努力学习的预备程序媛一枚~ 博主主页: @是瑶瑶子啦 所属专栏: Java岛冒险记【从小白到大佬之路】 因为瑶瑶子正在备战蓝桥杯和校内ACM选拔赛,最近在学习算法相关的知识。我是借助 AcWing网站 来学习的,这篇文章是我学习就我学习内容的一个笔记,其中的一些

    2024年02月01日
    浏览(61)
  • 【数据结构】图解:迪杰斯特拉算法(Dijkstra)最短路径

    目录 一、方法描述 二、例题一  ​编辑 三、例题二  有图如上,用迪杰斯特拉算法求顶点A到其余各顶点的最短路径,请问1.第一步求出的最短路径是A到C的最短路径2.第二步求出的是顶点A到顶点B/F的最短路径3.顶点A到D的最短路径长度是__25___ (填数字)4.顶点A到顶点F的最短路

    2024年02月12日
    浏览(37)
  • 【图解数据结构】顺序表实战指南:手把手教你详细实现(超详细解析)

    🌈个人主页: 聆风吟 🔥系列专栏: 图解数据结构、算法模板 🔖少年有梦不应止于心动,更要付诸行动。 线性表(linear list):线性表是一种数据结构,由n个具有相同数据类型的元素构成一个有限序列。 线性表可以用数组、链表、栈等方式实现,常见的线性表有数组、链

    2024年01月22日
    浏览(68)
  • 数据结构——排序算法——归并排序

    在第二个列表向第一个列表逐个插入的过程中,由于第二个列表已经有序,所以后续插入的元素一定不会在前面插入的元素之前。在逐个插入的过程中,每次插入时,只需要从上次插入的位置开始,继续向后寻找插入位置即可。这样一来,我们最多只需要将两个有序数组遍历

    2024年02月09日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包