陣列排序的實現

泰斗賢若如發表於2019-03-31

陣列排序方法的實現

 

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]+" ");
		}
	}
}

  

 

相關文章