比较器内部如何工作?

Dav*_*vin 7 java sorting comparator

这对你来说可能听起来微不足道,但我很难想象比较器/ array.sort。我们如何仅使用 2 个参数对完整数组进行排序?它的内部是如何运作的?

例如 - 输入 -[5,3,2,6,8,10,1],输出 - [1,2,3,5,6,8,10] 它内部使用哪种算法?它首先比较哪两个对象?(5 与 3 相比?)那么接下来的两个对象是什么?(5 与 2 相比?)或(3 与 2 相比)?

public static void main(String[] args) {
         Integer[] tring = new Integer[]{5,3,2,6,8,10,1};
       lol(tring);
       for(int i=0;i<tring.length;i++){
       System.out.println(tring[i]);
       }
    }
    
    public static void lol(Integer[] args) {
      Arrays.sort(args,(h1,h2)->h1-h2);
    }
Run Code Online (Sandbox Code Playgroud)

小智 5

您可以像这样可视化该过程。

Integer[] tring = new Integer[]  {5, 3, 2, 6, 8, 10, 1};
Comparator<Integer> comparator = (a, b) -> {
    System.out.println(Arrays.toString(tring) + " comparing " + a + " and " + b);
    return a.compareTo(b);
};
Arrays.sort(tring, comparator);
System.out.println(Arrays.toString(tring));
Run Code Online (Sandbox Code Playgroud)

结果:

[5, 3, 2, 6, 8, 10, 1] comparing 3 and 5
[5, 3, 2, 6, 8, 10, 1] comparing 2 and 3
[5, 3, 2, 6, 8, 10, 1] comparing 6 and 2
[2, 3, 5, 6, 8, 10, 1] comparing 6 and 3
[2, 3, 5, 6, 8, 10, 1] comparing 6 and 5
[2, 3, 5, 6, 8, 10, 1] comparing 8 and 5
[2, 3, 5, 6, 8, 10, 1] comparing 8 and 6
[2, 3, 5, 6, 8, 10, 1] comparing 10 and 5
[2, 3, 5, 6, 8, 10, 1] comparing 10 and 8
[2, 3, 5, 6, 8, 10, 1] comparing 1 and 6
[2, 3, 5, 6, 8, 10, 1] comparing 1 and 3
[2, 3, 5, 6, 8, 10, 1] comparing 1 and 2
[1, 2, 3, 5, 6, 8, 10]
Run Code Online (Sandbox Code Playgroud)