Bucket Sort in Java2025年5月3日 | 阅读 6 分钟 桶排序是一种排序技术,其中元素首先被均匀地分成几个称为桶的组。之后,使用任何排序算法对元素进行排序,最后,将元素收集起来形成一个有序的序列。在本节中,我们将学习桶排序的工作原理、其算法、复杂度、示例以及在 Java 程序中的实现。 桶排序桶排序或箱排序是一种排序算法,它通过将元素均匀地分布到多个桶中来工作。然后对每个桶进行单独排序。为了对桶进行排序,我们使用 Arrays 类的 sort() 方法。它通常用于对浮点数进行排序。 执行桶排序的基本思想是
优点
缺点
让我们看看算法。 算法Bucket Sort(A[])
复杂度
桶排序示例使用桶排序将以下数组按升序排序。 arr[]=22, 45, 12, 8, 10, 6, 72, 81, 33, 18, 50, 14 给定数组中的元素总数 (N) = 12 数组中的最大元素 = 81 数组中的最小元素 = 6 ![]() 我们需要10个桶来对数组进行排序。假设这 10 个桶由B表示。之后,我们需要找到一个分隔符,用于将元素放入桶中。为了确定分隔符,我们使用以下公式 ![]() 将值放入上述公式中,我们得到 ![]() 因此,桶数 = 10,分隔符 = 9 我们将使用以下公式将元素 arr[i] 放入正确的桶中 ![]() 让我们通过将元素放入桶中来查看它是如何工作的。我们将从第一个索引开始。 对于 i=0 ![]() 我们将第零个元素(22)插入第 2 个桶,并将数组索引 (i) 增加 1。 对于 i=1 ![]() 我们将第一个元素(45)插入第 5 个桶,并将数组索引 (i) 增加 1。 对于 i=2 ![]() 我们将第二个元素(12)插入第 1 个桶,并将数组索引 (i) 增加 1。 对于 i=3 ![]() 我们将第三个元素(8)插入第 0 个桶,并将数组索引 (i) 增加 1。 对于 i=4 ![]() 我们将第四个元素(10)插入第 1 个桶,并将数组索引 (i) 增加 1。 对于 i=5 ![]() 我们将第五个元素(6)插入第 0 个桶,并将数组索引 (i) 增加 1。 对于 i=6 ![]() 我们将第六个元素(72)插入第 8 个桶,并将数组索引 (i) 增加 1。 对于 i=7 ![]() 我们将第七个元素(81)插入第 8 个桶,并将数组索引 (i) 增加 1。 对于 i=8 ![]() 我们将第八个元素(33)插入第 3 个桶,并将数组索引 (i) 增加 1。 对于 i=9 ![]() 我们将第九个元素(18)插入第 2 个桶,并将数组索引 (i) 增加 1。 对于 i=10 ![]() 我们将第十个元素(50)插入第 5 个桶,并将数组索引 (i) 增加 1。 对于 i=11 ![]() 我们将第十一个元素(14)插入第 1 个桶,并将数组索引 (i) 增加 1。 ![]() 现在,我们将对各个桶执行插入排序以对元素进行排序。让我们从第一个桶(第 0 个)开始。 是否? 是的,交换它们的位置。 ![]() 现在,转到下一个桶(第 1 个),并比较每个元素与其他元素。 是否? 是的,交换它们的位置并比较下一对。是否? 否,元素已按排序顺序排列,因此我们不会交换它们的位置。 ![]() 现在,转到下一个桶(第 2 个)并比较它们的元素。 是否? 是的,交换它们的位置。 ![]() 现在,我们将转到下一个桶。在这里,需要注意的是,只有一个元素的桶已经排序,而没有元素的桶将被跳过。因此,我们将转到第五个桶并比较它们的元素。 是否? 否,元素已排序。同样,跟踪桶,直到我们到达最后一个桶。因此,我们在这里停止,因为我们已经得到了一个已排序的数组。 ![]() 最后,我们将从每个桶中取出所有元素。因此,我们得到一个已排序的数组。 ![]() 我们已经理解了桶排序的逻辑。让我们在 Java 程序中实现该逻辑,并执行数组的桶排序。 桶排序 Java 程序BucketSortExample1.java 输出 Unsorted Array: [22, 45, 12, 8, 10, 6, 72, 81, 33, 18, 50, 14, 55, 0, 12, 55] Sorted Array: [0, 6, 8, 10, 12, 12, 14, 18, 22, 33, 45, 50, 55, 55, 72, 81] 让我们创建另一个 Java 程序,该程序随机生成数组元素并使用桶排序对它们进行排序。 BucketSortExample2.java 输出 Sorted array after performing bucket sort: Un-sorted Array: 16, 1, 0, 6, 14, 4, 22, 19, 37, 34, 17, 39 Sorted Array: 0, 1, 4, 6, 14, 16, 17, 19, 22, 34, 37, 39 下一个主题Java-检测链表中循环的程序 |
James Gosling于1995年创建了Java,这是一门高级编程语言。Java是Android应用程序的流行语言。Java甚至用于Android操作系统的创建。由于其清晰、简洁和易于理解的语法,它深受开发人员的喜爱。超过...
阅读 3 分钟
Java 开发人员经常使用 keytool 命令行实用程序来管理密钥库、创建密钥和生成证书。然而,在创建密钥对或签署证书时,用户有时可能会遇到错误:keytool error: java.io.IOException: Invalid AVA format。此错误通常表示存在问题……
阅读 3 分钟
填字游戏几十年来一直是流行的娱乐和脑力锻炼形式。这些谜题挑战玩家在一系列字母的网格中找到隐藏的单词。随着技术的进步,解决填字游戏的问题已进入……
7 分钟阅读
当链表中的一个节点指向前面的节点时,会形成一个循环,创建一个周期而不是结束列表。检测和移除此循环可以恢复列表的线性结构,避免无限遍历并提高其对后续操作的可靠性。方法:使用哈希此...
阅读9分钟
在本节中,我们将学习什么是 Kynea 数,并创建 Java 程序来计算 Kynea 数。Kynea 数程序经常出现在 Java 编码面试和学术中。Kynea 数是递归定义的数字:F(k) = 4 x F(k...
阅读 6 分钟
在本节中,我们将学习 Java 中的 Morris 遍历前序遍历。在 Morris 遍历中,我们无需递归或堆栈即可完成树的遍历。Morris 遍历基于线索化二叉树。Morris 遍历前序算法 下面是...
阅读 4 分钟
? 在 Java 中,主要有三个与 String 相关的类。这些类是 String、StringBuilder 和 StringBuffer 类。这三个类提供了与字符串操作相关的方法。删除字符串的第一个和最后一个字符也是我们可以执行的操作...
阅读 6 分钟
? Java,这个广阔的印度尼西亚岛屿以其丰富的文化遗产而闻名,历史上一直是多元社区和民族群体的熔炉。在这些群体中,Kalangs 占有重要地位。Kalangs 是一个独特的民族和文化社区,曾在 Java 繁荣发展,...
阅读 3 分钟
在 Java 中,final 是一个关键字。它是一个非访问修饰符。这意味着它限制了变量、方法和类的修改。它确保一旦将实体声明为 final,它就可以被赋值和定义一次。另一方面,引用...
7 分钟阅读
Java 编程语言的 FileInputStream 类用于以面向字节的方式从文件中读取数据。它有几个数据读取方法,包括 read()、read(byte[]) 和 read(byte[], int, int)。FileInputStream 类从 Object 类继承的 finalise() 方法是其中一个...
阅读 4 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India