1. 首先说明三点:

(1)桶排序是稳定的

(2)桶排序是常见排序里最快的一种,比快排还要快…大多数情况下

(3)桶排序非常快,但是同时也非常耗空间,基本上是最耗空间的一种排序算法

2. 桶排序的分析过程:

对无序数组有个要求,就是成员隶属于固定(有限的)的区间,如范围为[0-9],考试分数为1-100等

例如待排数字[6,2,4,1,5,9]

准备10个空桶(桶数是固定区间中最大数,比如这里就是10)

[6 2 4 1 5 9]               待排数组

[0 0 0 0 0 0 0 0 0 0]   空桶

[0 1 2 3 4 5 6 7 8 9]   桶编号(实际不存在)

(1)顺序从待排数组中取出数字,首先6被取出,然后把6入6号桶,这个过程类似这样:空桶[ 待排数组[ 0 ] ] = 待排数组[ 0 ]

[6 2 4 1 5 9]             待排数组

[0 0 0 0 0 0 6 0 0 0]   空桶

[0 1 2 3 4 5 6 7 8 9]   桶编号(实际不存在)

(2)顺序从待排数组中取出下一个数字,此时2被取出,将其放入2号桶,是几就放几号桶:

[6 2 4 1 5 9]               待排数组

[0 0 2 0 0 0 6 0 0 0]   空桶

[0 1 2 3 4 5 6 7 8 9]   桶编号(实际不存在)

(3)4,5,6省略,过程一样,全部入桶后变成下边这样:

[6 2 4 1 5 9]               待排数组

[0 1 2 0 4 5 6 0 0 9]   空桶

[0 1 2 3 4 5 6 7 8 9]   桶编号(实际不存在)

 

0表示空桶,跳过,顺序取出即可:1 2 4 5 6 9

3. 桶排序代码实现:

 1 /* package whatever; // don't place package name! */
 2
 3 import java.util.*;
 4 import java.lang.*;
 5 import java.io.*;
 6
 7 /* Name of the class has to be "Main" only if the class is public. */
 8 class Ideone
 9 {
10     public static void main (String[] args) throws java.lang.Exception
11     {
12         int[] Array = { 99, 65, 24, 47, 50, 88,33, 66, 67, 31, 18 };
13         int[] newArray = bucketSort(Array,99);
14         printArray(newArray);
15     }
16
17     public static int[] bucketSort(int[] array,int maxNumber) {
18         int[] newArray = new int[maxNumber + 1];
19
20         for(int i=0; i<array.length; i++) {
21             newArray[array[i]] = array[i];
22
23         }
24
25         return newArray;
26     }
27
28     // 打印功能
29     public static void printArray(int[] arr) {
30         System.out.print("[");
31         for (int x = 0; x < arr.length; x++) {
32
33            if(arr[x] >0) {
34                    System.out.print(arr[x]+" ");
35            }
36         }
37         System.out.println("]");
38     }
39 }

运行效果,如下:

转载于:https://www.cnblogs.com/hebao0514/p/4832191.html

Java基础知识强化51:经典排序之桶排序(BucketSort)相关推荐

  1. Java基础知识强化之集合框架笔记76:ConcurrentHashMap之 ConcurrentHashMap简介

    1. ConcurrentHashMap简介: ConcurrentHashMap是一个线程安全的Hash Table,它的主要功能是提供了一组和Hashtable功能相同但是线程安全的方法.Conc ...

  2. Java基础知识强化53:经典排序之选择排序(SelectionSort)

    1.选择排序的原理图: 2. 选择排序代码实现: 1 package cn.itcast_02; 2 3 /* 4 * 数组排序之选择排序: 5 * 从0索引开始,依次和后面元素比较,小的往前放,第一 ...

  3. java 基础知识-数组的7种算法(排序、求和、最值、遍历...)

    遍历 遍历就是把这个数组的每个元素 显示出来 遍历的方法就是先定义这个数组的大小,然后用FOR循环来完成数组,例如 double[] score = new double[5];Scanner inp ...

  4. Java基础知识强化之集合框架笔记27:ArrayList集合练习之去除ArrayList集合中的重复字符串元素...

    1. 去除ArrayList集合中的重复字符串元素(字符串内容相同) 分析: (1)创建集合对象 (2)添加多个字符串元素(包含重复的) (3)创建新的集合 (4)遍历旧集合,获取得到每一个元素 (5 ...

  5. Java基础知识强化之IO流笔记44:IO流练习之 复制图片的 4 种方式案例

    1. 复制图片的 4 种方式案例: 分析: 复制数据,如果我们知道用记事本打开并能够读懂,就用字符流,否则用字节流. 通过该原理,我们知道我们应该采用字节流. 而字节流有4种方式,所以做这个题目我们有 ...

  6. Java基础知识强化之网络编程笔记04:UDP之发送端的数据来自于键盘录入案例

    1. 数据来自于键盘录入 键盘录入数据要自己控制录入结束. 2. 代码实现: (1)发送端: 1 package com.himi.updDemo1; 2 3 import java.io.IOExc ...

  7. Java基础知识强化99:Java 常见异常及趣味解释

    常见 Java 异常解释:(译者注:非技术角度分析.阅读有风险,理解需谨慎:) 1. java.lang java.lang软件包是java语言的核心部分,它提供了java中的基础类. java.la ...

  8. Java基础知识强化之网络编程笔记03:UDP之UDP协议发送数据 和 接收数据

    1. UDP协议发送数据 和 接收数据 UDP协议发送数据: • 创建发送端的Socket对象 • 创建数据,并把数据打包 • 调用Socket对象的发送方法,发送数据包 • 释放资源  UDP协议接 ...

  9. Java基础知识强化14:Java死亡竞赛题目解析

      一个小型网站上发布了一个称为Java"死亡竞赛"的新项目.测验发布后,超过20000位开发者参加了测验.网站以20道关于Java的多选题为主.我们得到了众多开发者的测验统计数据 ...

最新文章

  1. Leangoo 6.2.7 版发布
  2. Excel实战技巧之[活用条件格式]
  3. python椭圆函数_python数字图像处理(16):霍夫圆和椭圆变换
  4. 大数据时代网络安全必读
  5. Redis与Java - 实践
  6. 分析java程序的命令总结jps,jstack
  7. SQLServer 2008数据库查看死锁、堵塞的SQL语句
  8. paip.android 手机输入法制造大法
  9. nodejs后台系列--第六篇-把nodejs后台部署到云服务器上面
  10. word如何打出取整符号
  11. SSIS(简单数据抽取过程介绍)
  12. Ubuntu20.04下搜狗输入法安装配置(超精简)
  13. C/C++ typedef用法详解
  14. 计算机网络(24)——轮转访问MAC协议
  15. 计算机行显示性能调整,win7系统怎么调节为最佳性能模式-win7性能,win7运行速度提高90%...
  16. 2021/8/11 火狐浏览器报错 建立安全连接失败 连接到 www.baidu.com 时发生错误。您正试图导入一个与已存在证书相同颁发者和序列号但却不相同的证书。错误代码SEC_ERROR_REU
  17. 报名倒计时 | 有道技术沙龙,聊聊明星语音背后的故事
  18. 改纸盒大小_【印刷技术】今天才知道,原来要这样制作小规格纸箱
  19. YUV RGB 相互转换矩阵
  20. Git分布式版本控制工具【IDEA版】【安装和使用以及上传代码到Gitee】(一篇文章精通系列)

热门文章

  1. 电气工程学计算机,麻省理工学院电气工程与计算机科学专业解读
  2. JS !(非运算)详解
  3. java sapi.spvoice 更改发音人_我最喜欢的几个Java开发工具,推荐8个给你们!
  4. WebRTC直播技术方案
  5. 计算机专业审核作业指导书,专业审核作业指导书
  6. SecureCRT日志上添加时间戳
  7. Qt 线程基础(QThread、QtConcurrent等)
  8. win7系统下的打印机不能扫描
  9. RDP协议详细解析(二)
  10. to_csvread_csvisnullisnanisna