冒泡算法及进阶版

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;
    }
}
posted @ 2022-03-23 08:51  fjhnb  阅读(40)  评论(0)    收藏  举报