陣列排序方法的實現
JAVA中在運用陣列進行排序功能時,一般有四種方法:快速排序法、冒泡法、選擇排序法、插入排序法。
快速排序法主要是運用了Arrays中的一個方法Arrays.sort()實現。
冒泡法是運用遍歷陣列進行比較,通過不斷的比較將最小值或者最大值一個一個的遍歷出來。
選擇排序法是將陣列的第一個資料作為最大或者最小的值,然後通過比較迴圈,輸出有序的陣列。
插入排序是選擇一個陣列中的資料,通過不斷的插入比較最後進行排序。
<1>利用Arrays帶有的排序方法快速排序
import java.util.Arrays; public class Test2{ public static void main(String[] args){ int[] a={5,4,2,4,9,1}; Arrays.sort(a); //進行排序 for(int i: a){ System.out.print(i); } } }
<2>氣泡排序演算法
public static int[] bubbleSort(int[] args){//氣泡排序演算法 for(int i=0;i<args.length-1;i++){ for(int j=i+1;j<args.length;j++){ if (args[i]>args[j]){ int temp=args[i]; args[i]=args[j]; args[j]=temp; } } } return args; }
<3>選擇排序演算法
public static int[] selectSort(int[] args){//選擇排序演算法 for (int i=0;i<args.length-1 ;i++ ){ int min=i; for (int j=i+1;j<args.length ;j++ ){ if (args[min]>args[j]){ min=j; } } if (min!=i){ int temp=args[i]; args[i]=args[min]; args[min]=temp; } } return args; }
<4>插入排序演算法
public static int[] insertSort(int[] args){//插入排序演算法 for(int i=1;i<args.length;i++){ for(int j=i;j>0;j--){ if (args[j]<args[j-1]){ int temp=args[j-1]; args[j-1]=args[j]; args[j]=temp; }else break; } } return args; }
1.自然升序排序
package peng; 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 + " "); } } }
2.自然降序排序
利用Collections.reverseOrder()方法:倒敘排列,陣列倒置。
package peng; 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 peng; 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; } }
3:陣列倒置
【方法一】使用集合個工具類: Collections.reverse(ArrayList) 將陣列進行反轉:
import java.util.ArrayList;import java.util.Collections; public class Main { public static void main(String[] args) { ArrayList arrayList = new ArrayList(); arrayList.add("A"); arrayList.add("B"); arrayList.add("C"); arrayList.add("D"); arrayList.add("E"); System.out.println("反轉前排序: " + arrayList); Collections.reverse(arrayList); System.out.println("反轉後排序: " + arrayList); } }
以上程式碼執行輸出結果為: 反轉前排序: [A, B, C, D, E] 反轉後排序: [E, D, C, B, A]
【方法二】使用集合ArrayList實現反轉:
【方法三】直接使用陣列實現反轉,即,反轉後陣列的第一個元素等於源陣列的最後一個元素:
方法二和方法三的實現程式碼如下:
package javatest2; import java.util.ArrayList; public class JavaTest2 { public static void main(String[] args) { String[] Array = { "a", "b", "c", "d", "e" }; reverseArray1(Array);// 使用集合ArrayList實現反轉 for (int j = 0; j < Array.length; j++) { System.out.print(Array[j] + " "); } System.out.print("\n"); String[] temp = reverseArray2(Array);// 直接使用陣列實現反轉 for (int j = 0; j < temp.length; j++) { System.out.print(Array[j] + " "); } }
/* * 函式:reverseArray1和reverseArray2 * 功能:實現 陣列翻轉 * 例如:{'a','b','c','d'}變成{'d','c','b','a'} */ private static void reverseArray1(String[] Array) { ArrayList<String> array_list = new ArrayList<String>(); for (int i = 0; i < Array.length; i++) { array_list.add(Array[Array.length - i - 1]); } Array = array_list.toArray(Array); }
private static String[] reverseArray2(String[] Array) { String[] new_array = new String[Array.length]; for (int i = 0; i < Array.length; i++) { // 反轉後陣列的第一個元素等於源陣列的最後一個元素: new_array[i] = Array[Array.length - i - 1]; } return new_array; } }
4:隨機排序
1:Java List容器內元素的順序重新隨機排序、洗牌排序
import java.util.Arrays; import java.util.Collections; import java.util.List; public class ListShuffle { public static void main(String[] args) { //假設,list容器中裝了一副撲克牌的元素 String[] strArray = new String[] { "A", "K", "Q", "J", "10", "9", "8", "7", "6", "5", "4", "3", "2" }; List<String> list = Arrays.asList(strArray); System.out.println("List容器中撲克牌元素的排列順序:" + list); //打亂List容器的元素排列順序 Collections.shuffle(list); System.out.println("Shuffle(洗牌、打亂)後List容器中元素的排列順序:" + list); //再次打亂List容器的元素排列順序 Collections.shuffle(list); System.out.println("再次Shuffle(洗牌、打亂)後List容器中元素的排列順序:" + list); //再次打亂List容器的元素排列順序 Collections.shuffle(list); System.out.println("再次Shuffle(洗牌、打亂)後List容器中元素的排列順序:" + list); } }
執行結果: List容器中撲克牌元素的排列順序:[A, K, Q, J, 10, 9, 8, 7, 6, 5, 4, 3, 2] Shuffle(洗牌、打亂)後List容器中元素的排列順序:[K, 10, 4, 3, 8, 7, A, J, 9, 6, Q, 5, 2] 再次Shuffle(洗牌、打亂)後List容器中元素的排列順序:[10, 5, A, K, J, 4, 2, 3, 6, 7, 8, Q, 9] 再次Shuffle(洗牌、打亂)後List容器中元素的排列順序:[5, 9, 10, 8, A, J, 7, K, 6, Q, 4, 3, 2]
2:數字陣列隨機生產
public class RandomSortTest { private int[]arr = {1,2,3,4,5,6,7,8}; private static final int SIZE = 8; Random random = new Random(); @Test //重新排列 public void sort(){ printArr(); for(int i=0;i<SIZE;i++){ int p = random.nextInt(i+1); System.out.println("i==="+i+"p==="+p); int tmp = arr[i]; arr[i] = arr[p]; arr[p] = tmp; } printArr(); //1 2 4 8 5 3 7 6 //4 1 8 7 2 6 5 3 //1 8 2 3 5 4 6 7 //5 7 8 3 4 2 6 1 }
@Test //列印 public void printArr(){ for(int i=0;i<SIZE;i++){ System.out.print(arr[i]+" "); } } }