Java Arrays类进行基本数据类型的数组的排序

       今天在写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);  //格式化输出两位小数
        }
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章