1. 程式人生 > 其它 >JAVA.Arrays.sort(排序)

JAVA.Arrays.sort(排序)

Arrays.sort

從小到大排序

常用方法:
Arrays.sort(陣列名,起始下表,終止下表)
Arrays.sort(陣列名)
舉例:

點選檢視程式碼
/**
*輸入案例:
*5 4 3 2 1
*輸出:
*4.0 5.0 3.0 2.0 1.0
*1.0 2.0 3.0 4.0 5.0
**/
import java.util.*;
import java.util.Arrays;
public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		double[] a=new double[5];
		for(int i=0;i<5;i++) {
			a[i]=sc.nextDouble();
		}
		Arrays.sort(a,0,2);
		for (double t:a) {
			System.out.print(t+ " ");
		}
		System.out.println();

		Arrays.sort(a);
		for (double t:a) {
			System.out.print(t+ " ");
		}
		System.out.println();
		sc.close();
	}
}

從大到小

常用方法:
Arrays.sort(陣列名,起始下標,終止下標,new cmp() );

cmp函式:

public int compare(Object o1,Object o2)
{
   //降序
	if(o1<o2) return 1;//正數
	else if(o1>o2) return -1;//負數
	else return 0;
	//升序:與上面相反
}

案例(重要,注意看)

import java.util.*;
import java.util.Arrays;
import java.util.Comparator;

class cmp implements Comparator<Double>{
	/**
	*<>內是比較的資料型別(封裝類/自定義類)
	*如何不寫<...>則下面改成:
	**  public int compare((Object o1,(Object o2) {//Object
	**	Double n1=(Double)o1; //強制轉化為比較的資料型別
	**	Double n2=(Double)o2; //強制轉化為比較的資料型別
	** }
	*/
	public int compare(Double o1,Double o2) {
		if(o1<o2) return 1;
		else if(o1>o2) return -1;
		else return 0;
	}
}
public class Main {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		Double[] a=new Double[5];//封裝類陣列/自定義類陣列

		for(int i=0;i<5;i++) {
			a[i]=sc.nextDouble();
		}

		Arrays.sort(a, new cmp());//比較

		for (double t:a) {
			System.out.print(t+ " ");
		}
		System.out.println();
		sc.close();
	}
}

自定義類陣列排序

方法:同上面從大到小排序
舉例:

/*
要求按照槍支的攻擊力排序(由大到小),
如果某些槍的攻擊力相同則對這些槍按照價格排序(由小到大),
如果某些槍的價格相同則對這些槍按照名字的字典序排列。
(本題中若字串a,b滿足 strcmp(a, b)<0 即滿足字典序)
*/
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;
import java.util.*;

class shu /// 建立類
{
	String name;
	int mon;
	int hunt;
}

class cmp implements Comparator<shu> {
	public int compare(shu A, shu B) {
		if (A.hunt == B.hunt) 
		{
			if (A.mon == B.mon) 
			{/************** 按字典序排序*****************/
				int flag = (A.name).compareTo(B.name);
				if (flag == 0)	return 0;
				else if (flag < 0)	return -1;
				else	return 1;
			}
			else 
			{
				if (A.mon == B.mon)	return 0;
				else if (A.mon < B.mon)	return -1;
				else	return 1;
			}
		} 
		else 
		{
			if (A.hunt == B.hunt)return 0;
			else if (A.hunt < B.hunt)	return 1;
			else	return -1;
		}
	}
}

public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		shu num[] = new shu[100005];// 建立類陣列
		int n = sc.nextInt();
		for (int i = 0; i < n; i++) {
			num[i] = new shu();// 注意這裡
			num[i].name = sc.next();
			num[i].hunt = sc.nextInt();
			num[i].mon = sc.nextInt();
		}

		Arrays.sort(num, 0, n, new cmp());// 排序

		for (int i = 0; i < n; i++) {
			System.out.print(num[i].name + " ");
		}
		sc.close();

	}
}