1. 程式人生 > 實用技巧 >排序演算法--Java實現

排序演算法--Java實現

排序演算法

其中的程式碼如果有問題或者有更好的解法,望各位不吝賜教!

氣泡排序

原理:以一個整數陣列為例,排序核心是每次比較相鄰兩個元素的大小,這樣一次迴圈可以將一個最大或最小的元素放到陣列頭或陣列尾,直到沒有元素被移動演算法結束

步驟(按從小到大排序):

  1. 遍歷陣列,比較相鄰兩個元素,如果prev>next,那麼交換兩個元素
  2. 遍歷完之後判斷是否有元素被移動
    1. 被移動-->返回步驟1
    2. 無移動-->步驟3
  3. 退出演算法

程式碼實現:

public class BubbleSort {
    public static void main(String[] args) {
        final long SEED = -26443L;
        final int[] unSortArray = new int[10];

        Random random = new Random();
        random.setSeed(SEED);

        for (int i = 0; i < 10; ++i) {
            unSortArray[i] = Math.abs(random.nextInt() % 100);
        }
        
        // [77, 67, 8, 2, 88, 95, 75, 14, 41, 75]
        System.out.println(Arrays.toString(unSortArray));
        bubbleSort(unSortArray);
        // [2, 8, 14, 41, 67, 75, 75, 77, 88, 95]
        System.out.println(Arrays.toString(unSortArray));
    }

    static void bubbleSort(int[] arr) {
        if (arr.length < 2) {
            return;
        }

        // 記錄元素移動次數
        int count;

        while (true) {
            count = 0;

            for (int i = 0; i < arr.length - 1; i++) {
                if (arr[i] > arr[i + 1]) {
                    swap(arr, i, i + 1);
                    count++;
                }
            }

            if (count == 0) {
                return;
            }
        }
    }

    static void swap(int[] arr, int idx, int oIdx) {
        int temp = arr[idx];
        arr[idx] = arr[oIdx];
        arr[oIdx] = temp;
    }
}