今天在寫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); //格式化輸出兩位小數
}
}
}