模仿Arrays sort方法的冒泡排序 | 冒泡排序改进

import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        int[] arrInt1 = {1, 56, 21, 34, 2};
        int[] arrInt2 = {1, 2, 3, 4, 5, 6};
        BubbleSort(arrInt1, new Comparator<Integer>() {
            // 重写compare方法,用来决定:是从小到大排序,还是从大到小排序
            @Override
            public int compare(Integer o1, Integer o2) {
                return o2 - o1;
            }
        });
        System.out.println(Arrays.toString(arrInt1));
    }

    public static void BubbleSort(int[] nums, Comparator<Integer> c) {
        boolean flag = false;
        for (int i = 0; i < nums.length - 1; i++) {
            for (int j = 0; j < nums.length - i - 1; j++) {
                if (c.compare(nums[j], nums[j + 1]) > 0) {
                    int t = nums[j];
                    nums[j] = nums[j + 1];
                    nums[j + 1] = t;
                    flag = true;
                }
            }
            if (flag) { 
                //如果一轮循环下来,不需要改变数据的顺序,则表明不需要重新排序(本来就是有顺序的)
                break;
            }
        }
    }
}

关键在于代码if (c.compare(nums[j], nums[j + 1]) > 0)和重写的public int compare(Integer o1, Integer o2)方法。

你可能感兴趣的:(java,java,算法,排序算法,冒泡排序,排序改进)