今天在写ACM的时候遇到一个要排序的数组操作,刚开始时是自己写了一个简单的冒泡排序,但后来才想起java本身就提供了一个基本数据类型的数组的排序,那就是Arrays中的sort()。Arrays类中的sort()使用的是快速排序法”,但要注意的是只能用于int[],double[],char[]等基数据类型的数组,Arrays类之只是提供了默认的升序排列,没有提供相应的降序排列方法。
函数原型:
static void sort(int[] a) //对指定的 int 型数组按数字升序进行排序。
static void sort(int[] a, int fromIndex, int toIndex) //对指定 int 型数组的指定范围按数字升序进行排序。
代码Demo:
题目:V先生有一天工作到很晚,回家的时候要穿过一条长l的笔直的街道,这条街道上有n个路灯。假设这条街起点为0,终点为l,第i个路灯坐标为ai。路灯发光能力以正数d来衡量,其中d表示路灯能够照亮的街道上的点与路灯的最远距离,所有路灯发光能力相同。为了让V先生看清回家的路,路灯必须照亮整条街道,又为了节省电力希望找到最小的d是多少?
输入:输入两行数据,第一行是两个整数:路灯数目n (1≤n≤1000),街道长度l (1 ≤l≤109)。第二行有n个整数ai (0 ≤ ai≤ l),表示路灯坐标,多个路灯可以在同一个点,也可以安放在终点位置。
输出:输出能够照亮整个街道的最小d,保留两位小数。
eg:输入
7 15
15 5 3 7 9 14 0
输出
2.50
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String args[]) {
Scanner cin = new Scanner(System.in);
while (cin.hasNext()) {
int n = cin.nextInt();
int l = cin.nextInt();
int[] array = new int[n];
for (int i = 0; i < n; i++) { //用数组接收路灯位置
array[i] = cin.nextInt();
}
Arrays.sort(array); //在这里调用排序
double d=-1;
for (int i = 1; i < array.length; i++) {
if (d < (array[i] - array[i - 1])) {
d = array[i] - array[i - 1];
}
}
d = d / 2.0f; //最大路灯距离除2得到d
if (d < array[0]) { //如果第一个路灯离起点位置比最大路灯距离远则d为起点到第一个路灯的距离
d = array[0];
}
if (d < (l - array[array.length - 1])) { //如果最后一个路灯离终点位置比最大路灯距离远则d为终点到最后一个路灯的距离
d = l - array[array.length - 1];
}
System.out.printf("%.2f",d); //格式化输出两位小数
}
}
}