zl程序教程

您现在的位置是:首页 >  Java

当前栏目

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

2023-03-09 22:18:14 时间

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的两个数组。