1. 程式人生 > 其它 >冒泡演算法及進階版

冒泡演算法及進階版

public class BubbleSort {
    public static void main(String[] args){
        int[] arr = new int[]{5,1,3,6,8,2,10,19,15};
        // 普通版
        // bubbleSort(arr);
        // 進階版
        bubbleSortPlus(arr);
        System.out.println(Arrays.toString(arr));
    }

    /**
     * 氣泡排序演算法
     * @param arr
     */
    private static void bubbleSort(int[] arr) {
        for(int i = 0;i < arr.length-1; i++){ // 進行冒泡的輪數
            for (int j = 0; j< arr.length-1-i; j++){ // 每輪進行比較的次數
                if (arr[j] > arr[j+1]){
                    swapNum(arr, j , j+1);
                }
            }
        }
    }

    /**
     * 氣泡排序近階版
     * @param arr
     */
    private static void bubbleSortPlus(int[] arr){
        int n = arr.length - 1;
        while(true){
            int index = 0;
            for (int i = 0;i < n;i++){ //每輪要交換的次數
                if (arr[i] > arr[i+1]){
                    swapNum(arr, i, i+1);
                    index = i; // 記錄下最後一次交換的位置
                }
            }
            n = index;
            if (n == 0){
                break;
            }
        }
    }

    /**
     * 交換陣列中的兩個數
     */
    public static void swapNum(int[] arr, int i, int j){
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }
}