Java核心技术卷I基础知识3.10.5 数组排序

简介:

3.10.5 数组排序


要想对数值型数组进行排序,可以使用Arrays类中的sort方法:

 

这个方法使用了优化的快速排序算法。快速排序算法对于大多数数据集合来说都是效率比较高的。Arrays类还提供了几个使用很便捷的方法,在稍后的API注释中将介绍它们。

程序清单3-7中的程序用到了数组,它产生一个抽彩游戏中的随机数值组合。假如抽彩是从49个数值中抽取6个,那么程序可能的输出结果为:

 

 

要想选择这样一个随机的数值集合,就要首先将数值1,2,…,n存入数组numbers中:

 

而用第二个数组存放抽取出来的数值:

 

现在,就可以开始抽取k个数值了。Math.random方法将返回一个0到1之间(包含0、不包含1)的随机浮点数。用n乘以这个浮点数,就可以得到从0到n-1之间的一个随机数。

 

下面将result的第i个元素设置为numbers[r]存放的数值,最初是r+1。但正如所看到的,numbers数组的内容在每一次抽取之后都会发生变化。

 

现在,必须确保不会再次抽取到那个数值,因为所有抽彩的数值必须不相同。因此,这里用数组中的最后一个数值改写number[r],并将n减1。

 

关键在于每次抽取的都是下标,而不是实际的值。下标指向包含尚未抽取过的数组元素。

在抽取了k个数值之后,就可以对result数组进行排序了,这样可以让输出效果更加清晰:

 

程序清单3-7 LotteryDrawing/LotteryDrawing.java

 

 

 

java.util.Arrays 1.2

static String toString(type[] a)  5.0

返回包含a中数据元素的字符串,这些数据元素被放在括号内,并用逗号分隔。

参数:a      类型为int、long、short、char、byte、boolean、f?loat或double的数组。

static type copyOf(type[] a, int length) 6

static type copyOfRange(type[] a, int start, int end) 6

返回与a类型相同的一个数组,其长度为length或者end-start,数组元素为a的值。

参数:a      类型为int、long、short、char、byte、boolean、f?loat或double的数组。

   start  起始下标(包含这个值)。

   end   终止下标(不包含这个值)。这个值可能大于a.length。在这种情况下,结果为0或false。

   length     拷贝的数据元素长度。如果length值大于a.length,结果为0或false;否则,数组中只有前面length个数据元素的拷贝值。

static void sort(type[] a)

采用优化的快速排序算法对数组进行排序。

参数:a      类型为int、long、short、char、byte、boolean、f?loat或double的数组。

static int binarySearch(type[] a, type v)

static int binarySearch(type[] a, int start, int end, type v)  6

采用二分搜索算法查找值v。如果查找成功,则返回相应的下标值;否则,返回一个负数值r。-r-1是为保持a有序v应插入的位置。

参数:a      类型为int、long、short、char、byte、boolean、f?loat或double的有序数组。

   start  起始下标(包含这个值)。

   end   终止下标(不包含这个值)。

   v      同a的数据元素类型相同的值。

static void f?ill(type[] a, type v)

将数组的所有数据元素值设置为v。

参数:a      类型为int、long、short、char、byte、boolean、f?loat或double的数组。

   v      与a数据元素类型相同的一个值。

static boolean equals(type[] a, type[] b)

如果两个数组大小相同,并且下标相同的元素都对应相等,返回true。

参数:a、b 类型为int、long、short、char、byte、boolean、f?loat或double的两个数组。

相关文章
|
22天前
|
NoSQL Java 数据库连接
深入探索 Java 后台开发的核心技术
【4月更文挑战第5天】本文探讨了Java后台开发的关键技术,包括Spring框架与Spring Boot的使用,MyBatis和Hibernate的ORM选择,关系型与NoSQL数据库的适用场景,线程池与异步处理在并发中的作用,微服务架构及RESTful API设计。这些核心技术有助于开发者打造稳定、高性能的Java后台系统,适应不断发展的云计算和人工智能需求。
|
22天前
|
Java 程序员 调度
Java中的多线程编程:基础知识与实践
【4月更文挑战第5天】 在现代软件开发中,多线程编程是一个不可或缺的技术要素。它允许程序员编写能够并行处理多个任务的程序,从而充分利用多核处理器的计算能力,提高应用程序的性能。Java作为一种广泛使用的编程语言,提供了丰富的多线程编程支持。本文将介绍Java多线程编程的基础知识,并通过实例演示如何创建和管理线程,以及如何解决多线程环境中的常见问题。
|
2天前
|
SQL Java 数据库连接
Java从入门到精通:2.3.1数据库编程——学习JDBC技术,掌握Java与数据库的交互
ava从入门到精通:2.3.1数据库编程——学习JDBC技术,掌握Java与数据库的交互
|
2天前
|
设计模式 存储 前端开发
Java从入门到精通:2.2.1学习Java Web开发,了解Servlet和JSP技术,掌握MVC设计模式
Java从入门到精通:2.2.1学习Java Web开发,了解Servlet和JSP技术,掌握MVC设计模式
|
2天前
|
Java API
Java从入门到精通:2.1.5深入学习Java核心技术之文件操作
Java从入门到精通:2.1.5深入学习Java核心技术之文件操作
|
2天前
|
并行计算 算法 安全
Java从入门到精通:2.1.3深入学习Java核心技术——掌握Java多线程编程
Java从入门到精通:2.1.3深入学习Java核心技术——掌握Java多线程编程
|
3天前
|
IDE Java 开发工具
Java从入门到精通:1.3.1实践编程巩固基础知识
Java从入门到精通:1.3.1实践编程巩固基础知识
|
3天前
|
Java
Java基础知识整理,驼峰规则、流程控制、自增自减
在这一篇文章中我们总结了包括注释、关键字、运算符的Java基础知识点,今天继续来聊一聊命名规则(驼峰)、流程控制、自增自减。
34 3
|
3天前
|
Java 开发者
Java基础知识整理,注释、关键字、运算符
在日常的工作中,总会遇到很多大段的代码,逻辑复杂,看得人云山雾绕,这时候若能言简意赅的加上注释,会让阅读者豁然开朗,这就是注释的魅力!
37 11
|
8天前
|
Java 关系型数据库 MySQL
一套java+ spring boot与vue+ mysql技术开发的UWB高精度工厂人员定位全套系统源码有应用案例
UWB (ULTRA WIDE BAND, UWB) 技术是一种无线载波通讯技术,它不采用正弦载波,而是利用纳秒级的非正弦波窄脉冲传输数据,因此其所占的频谱范围很宽。一套UWB精确定位系统,最高定位精度可达10cm,具有高精度,高动态,高容量,低功耗的应用。
一套java+ spring boot与vue+ mysql技术开发的UWB高精度工厂人员定位全套系统源码有应用案例