一.自然升序排序
Java語言提供給我們Array.sort(int [] arr)對數組進行升序排列,代碼如下:
package song; import java.util.Arrays; public class Testexample { public static void main(String[] args) { int[] a = {9, 8, 7, 2, 3, 4, 1, 0, 6, 5}; Arrays.sort(a); for(int arr:a) { System.out.print(arr + " "); } } }
二 自然降序排序
但是如果我們想要進行降序排序呢?Java提供了很靈活的自定義的方法:
利用Collections.reverseOrder()方法:
package song; import java.util.Arrays; import java.util.Collections; public class Testexample { public static void main(String[] args) { int[] a = {9, 8, 7, 2, 3, 4, 1, 0, 6, 5}; Arrays.sort(a,Collections.reverseOrder()); for(int arr:a) { System.out.print(arr + " "); } } }
實現Comparator接口的復寫compare()方法,代碼如下:
package song; import java.util.Arrays; import java.util.Collections; import java.util.Comparator; public class Testexample { public static void main(String[] args) { /*注意,要想改變默認的排列順序,不能使用基本類型(int,double, char) 而要使用它們對應的類*/ Integer[] a = {9, 8, 7, 2, 3, 4, 1, 0, 6, 5}; //定義一個自定義類MyComparator的對象 Comparator cmp = new MyComparator(); Arrays.sort(a,cmp); for(int arr:a) { System.out.print(arr + " "); } } } //實現Comparator接口 class MyComparator implements Comparator<Integer>{ @Override public int compare(Integer o1, Integer o2) { /*如果o1小於o2,我們就返回正值,如果o1大於o2我們就返回負值, 這樣顛倒一下,就可以實現降序排序了,反之即可自定義升序排序了*/ return o2-o1; }
三.隨機排序
有時我們需要隨機的排列數組中的元素,隨機排列數組,目前常用的有兩種方法,第一種就是元素A[i]對應一個優先級P[i],根據優先級作為鍵值來從新排序數組;第二種方法就是A[i]隨機的跟A[i]到A[n]中的任意個元素進行交換,n為數組的長度,下面是用java實現一個簡單實現.
import java.util.Date; import java.util.Random; /* * 隨即排列數組,給定一個數組,隨即排列其中的元素,目前主要有兩種方法 */ public class RandomSort { public static void main(String args[]){ int data[]=new int[]{1,42,51,62,8,94,23,13,40,5}; //int p[]=getRandom(1,-8,100); //show(p); show(data); permuteBySort(data); show(data); randomizeInPlace(data); show(data); } /* * 隨機排列數組,使用優先級方式,每個數組元素A[i] 對應一個優先級P[i], * 然后依據優先級對數組進行排序 */ private static void permuteBySort(int[] data) { int len=data.length; int len3=len*len*len; int P[]=getRandom(1,len3,len); //冒泡排序 for(int i=len-1; i>0; i--) { for(int j=0; j<i ; j++) { if(P[j]>P[j+1]) { int temp=data[j]; data[j]=data[j+1]; data[j+1]=temp; temp=P[j]; P[j]=P[j+1]; P[j+1]=temp; } } } } /* * 元素A[i]是從 元素A[i]到A[n]中隨機選取的 */ private static void randomizeInPlace(int[] data) { Date dt=new Date(); Random random=new Random(dt.getSeconds()); int len=data.length; for(int i=0; i<len; i++) { int pos=(int)(random.nextDouble()*(len-i+1)+i)-1; int temp=data[i]; data[i]=data[pos]; data[pos]=temp; } } /* * 獲得在a到b之間的n個隨機數 */ private static int[] getRandom(int a,int b,int n) { if(a>b) { int temp=a; a=b; b=temp; } Date dt=new Date(); Random random=new Random(dt.getSeconds()); int res[]=new int[n]; for(int i=0; i<n; i++) { res[i]=(int)(random.nextDouble()*(Math.abs(b-a)+1))+a; } return res; } private static void show(int[] data) { System.out.println("========================"); for(int i = 0; i < data.length; i++) { System.out.print(data[i] + " "); } System.out.println(); System.out.println("========================"); } }
四.數組倒序實例:
public class Test2 { public static void main(String[] args){ int[] test= {1,2,4,5,7}; for (int i : test) { System.out.print(i+" "); } System.out.println("\n"); test = Test2.reverse(test); for (int i : test) { System.out.print(i+" "); } } public static int[] reverse(int[] arr){ int[] result = new int[arr.length]; //new一個堆來裝一個數組 for (int i = 0,j=result.length-1; i < arr.length; i++,j--) { result[j] = arr[i]; } //遍歷數組里的每個數據,並對數據進行倒序 return result; } }