數列排序(數列的升序和降序)
阿新 • • 發佈:2019-02-12
一、問題描述:
給定一個長度為n的數列,將這個數列按從小到大的順序排列或者按照從大到小的順序排列; 在控制檯輸入一個整數n表示數列的長度;二、排序的實現方法:
1、數列的升序方法: Java的Arrays類中有一個sort()方法,該方法是Arrays類的靜態方法,在需要對陣列進行排序時經常用到此方法。 但是sort()的引數有好幾種,下面我就為大家一一介紹,這幾種形式的用法。 (1).Arrays.sort(int[] a) 這種形式是對一個數組的所有元素進行排序,並且是按從小到大的順序。具體程式碼如下:執行結果如下所示: 5public class Main { /** * @param args */ public static void main(String[] args)throws Exception { Scanner scanner=new Scanner(System.in); //獲取數列的個數 int n=scanner.nextInt(); int[] a=new int[n]; for (int i = 0; i < n; i++) { a[i]=scanner.nextInt(); //System.out.println(a[i]); } //呼叫java的sort方法對陣列進行升序排列 Arrays.sort(a); for (int i = 0; i < a.length; i++) { //輸出排列好以後的數列 System.out.print(a[i]+" "); } } }
0 9 5 3 7
0 3 5 7 9
(2).Arrays.sort(int[] a, int fromIndex, int toIndex)
這種形式是對陣列部分排序,也就是對陣列a的下標從fromIndex到toIndex-1的元素排序,注意:下標為toIndex的元素不參與排序哦!具體程式碼如下:
執行結果為:public class Main { /** * @param args */ public static void main(String[] args)throws Exception { Scanner scanner=new Scanner(System.in); //獲取數列的個數 int n=scanner.nextInt(); int[] a=new int[n]; for (int i = 0; i < n; i++) { a[i]=scanner.nextInt(); //System.out.println(a[i]); } //呼叫java的sort方法對陣列進行升序排列 Arrays.sort(a,0 ,3); for (int i = 0; i < a.length; i++) { //輸出排列好以後的數列 System.out.print(a[i]+" "); } } }
9
1 5 2 3 6 4 9 7 8
1 2 5 3 6 4 9 7 8
上例只是把1 5 2排列成了1 2 5
2、數列的降序方法:
(1).數列降序的前提是呼叫java的sort方法,將數列先升序排列,然後自定義一個MyComparator類並且實現Comparator介面;具體程式碼如下:
MyComparator類如下:public class Test1 { /** * @param args */ public static void main(String[] args) { Scanner scanner=new Scanner(System.in); int n=scanner.nextInt(); //注意,要想改變預設的排列順序,不能使用基本型別(int,double, char) //而要使用它們對應的類 Integer a[]=new Integer[n]; for (int i = 0; i < n; i++) { a[i]=scanner.nextInt(); } //定義一個自定義類MyComparator的物件 MyComparator mcp=new MyComparator(); Arrays.sort(a, mcp); for (int i = 0; i < a.length; i++) { System.out.print(a[i]+" "); } } }
/**
*
* @author you
* Comparator是一個介面,所以這裡我們自己定義的類MyComparator要implents該介面
* 而不是extends Comparator
*/
public class MyComparator implements Comparator<Integer>
{
@Override
public int compare(Integer o1, Integer o2)
{
//如果n1小於n2,我們就返回正值,如果n1大於n2我們就返回負值,
//這樣顛倒一下,就可以實現反向排序了
if (o1<o2)
{
return 1;
}else if (o1>o2) {
return -1;
}else {
return 0;
}
}
}
執行結果如下:
5
0 1 9 6 7
9 7 6 1 0
(2).降序排列的第二種方法:
程式碼如下:
public class Test2
{
/**
* @param args
*/
public static void main(String[] args)
{
Scanner scanner=new Scanner(System.in);
int n=scanner.nextInt();
int a[]=new int[n];
for (int i = 0; i <n; i++)
{
a[i]=scanner.nextInt();
}
Arrays.sort(a);
System.out.println("降序排列:");
//迴圈變數i=a.length-1;其意思是為i賦值為陣列a的最大元素個數減一作為其值,假設a.length的值為5
//那麼,i就等於4代表了陣列的最大元素下標.
//隨著迴圈變數i逐一遞減,依次迴圈遍歷陣列中的每個元素,直到迴圈變數i不大於0時迴圈結束.
for (int i=a.length-1;i>=0 ;i-- )
{
System.out.print(a[i]+" ");
}
}
}