1. 程式人生 > >數列排序(數列的升序和降序)

數列排序(數列的升序和降序)

一、問題描述:

         給定一個長度為n的數列,將這個數列按從小到大的順序排列或者按照從大到小的順序排列;     在控制檯輸入一個整數n表示數列的長度;

二、排序的實現方法:

  1、數列的升序方法:   Java的Arrays類中有一個sort()方法,該方法是Arrays類的靜態方法,在需要對陣列進行排序時經常用到此方法。   但是sort()的引數有好幾種,下面我就為大家一一介紹,這幾種形式的用法。   (1).Arrays.sort(int[] a)    這種形式是對一個數組的所有元素進行排序,並且是按從小到大的順序。具體程式碼如下:
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);
		for (int i = 0; i < a.length; i++)
		{
			//輸出排列好以後的數列
			System.out.print(a[i]+" ");
		}
          }
}
執行結果如下所示: 5
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介面;具體程式碼如下:

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]+" ");
		}
	}
}
    MyComparator類如下:
/**
 * 
 * @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]+" ");   
		  }
	}
}