如何将 qsort 从 C 翻译成 Java?

How to translate a qsort from C to Java?

我是一个相当新的编码员。我试图理解以下 C 代码:

int compar (const void *a, const void *b)
{
  return ((int *) a)[0] - ((int *) b)[0];
}

用于:

qsort (&tree[0][0], 8, 3 * sizeof (int), &compar);

树是一个 2D 数组,在这种情况下特别是 8x3(它充满了可能的移动,但我认为这与学习它的目的无关)。我理解 qsort 的前三个参数(虽然对于第一个调用地址的原因有点不确定,但我认为这就是 C 调用数组的方式),但不是第四个。我不明白 qsort 是如何使用 compar 的。我想设计一个 Java 排序方法,它和前面提到的 qsort 一样,虽然我并不真正关心它本身是快速排序(就像我'我可以自由使用 Java 可能提供的任何东西,它不一定是快速排序。因为这不是一个任务,我只想要一个可以快速排序的排序方法,所以 nlogn 或其他东西会有所帮助因为这个项目涉及很多递归并且调用了很多次)。我正在努力了解 compar 在做什么,然后 qsort 如何利用它进行排序。

unorderStart
 0     -2      1 
 0     -1      2 
 5      1      2 
 5      2      1 
 0      2     -1 
 0      1     -2 
 0     -1     -2 
 0     -2     -1 
unorderEnd
orderStart
 0     -2      1 
 0     -1      2 
 0      2     -1 
 0      1     -2 
 0     -1     -2 
 0     -2     -1 
 5      1      2 
 5      2      1 
orderEnd

unorderStart
 0     -1      3 
 1      0      4 
 3      2      4 
 3      3      3 
 3      3      1 
 3      2      0 
 0      0      0 
 0     -1      1 
unorderEnd
orderStart
 0     -1      3 
 0      0      0 
 0     -1      1 
 1      0      4 
 3      2      4 
 3      3      3 
 3      3      1 
 3      2      0 
orderEnd

unorderStart
 0     -2      5 
 0     -1      6 
 0      1      6 
 0      2      5 
 5      2      3 
 0      1      2 
 0     -1      2 
 0     -2      3 
unorderEnd
orderStart
 0     -2      5 
 0     -1      6 
 0      1      6 
 0      2      5 
 0      1      2 
 0     -1      2 
 0     -2      3 
 5      2      3 
orderEnd

unorderStart
 0      0      4 
 0      1      5 
 0      3      5 
 1      4      4 
 3      4      2 
 2      3      1 
 3      1      1 
 3      0      2 
unorderEnd
orderStart
 0      0      4 
 0      1      5 
 0      3      5 
 1      4      4 
 2      3      1 
 3      4      2 
 3      1      1 
 3      0      2 
orderEnd

unorderStart
 0      2      5 
 0      3      6 
 0      5      6 
 0      6      5 
 0      6      3 
 0      5      2 
 5      3      2 
 0      2      3 
unorderEnd
orderStart
 0      2      5 
 0      3      6 
 0      5      6 
 0      6      5 
 0      6      3 
 0      5      2 
 0      2      3 
 5      3      2 
orderEnd

unorderStart
 3      1      3 
 2      2      4 
 0      4      4 
 0      5      3 
 0      5      1 
 1      4      0 
 2      2      0 
 2      1      1 
unorderEnd
orderStart
 0      4      4 
 0      5      3 
 0      5      1 
 1      4      0 
 2      2      4 
 2      2      0 
 2      1      1 
 3      1      3 
orderEnd

unorderStart
 4      2      1 
 0      3      2 
 0      5      2 
 0      6      1 
 0      6     -1 
 0      5     -2 
 0      3     -2 
 0      2     -1 
unorderEnd
orderStart
 0      3      2 
 0      5      2 
 0      6      1 
 0      6     -1 
 0      5     -2 
 0      3     -2 
 0      2     -1 
 4      2      1 
orderEnd

unorderStart
 2      0      2 
 2      1      3 
 2      3      3 
 2      4      2 
 0      4      0 
 0      3     -1 
 0      1     -1 
 0      0      0 
unorderEnd
orderStart
 0      4      0 
 0      3     -1 
 0      1     -1 
 0      0      0 
 2      0      2 
 2      1      3 
 2      3      3 
 2      4      2 
orderEnd

unorderStart
 0     -2      3 
 0     -1      4 
 2      1      4 
 0      2      3 
 0      2      1 
 2      1      0 
 0     -1      0 
 0     -2      1 
unorderEnd
orderStart
 0     -2      3 
 0     -1      4 
 0      2      3 
 0      2      1 
 0     -1      0 
 0     -2      1 
 2      1      4 
 2      1      0 
orderEnd

unorderStart
 0     -1      5 
 0      0      6 
 0      2      6 
 0      3      5 
 1      3      3 
 7      2      2 
 0      0      2 
 0     -1      3 
unorderEnd
orderStart
 0     -1      5 
 0      0      6 
 0      2      6 
 0      3      5 
 0      0      2 
 0     -1      3 
 1      3      3 
 7      2      2 
orderEnd

unorderStart
 0      1      4 
 0      2      5 
 0      4      5 
 0      5      4 
 0      5      2 
 2      4      1 
 0      2      1 
 0      1      2 
unorderEnd
orderStart
 0      1      4 
 0      2      5 
 0      4      5 
 0      5      4 
 0      5      2 
 0      2      1 
 0      1      2 
 2      4      1 
orderEnd

unorderStart
 6      2      2 
 0      3      3 
 0      5      3 
 0      6      2 
 0      6      0 
 0      5     -1 
 0      3     -1 
 1      2      0 
unorderEnd
orderStart
 0      3      3 
 0      5      3 
 0      6      2 
 0      6      0 
 0      5     -1 
 0      3     -1 
 1      2      0 
 6      2      2 
orderEnd

unorderStart
 2      0      1 
 0      1      2 
 0      3      2 
 0      4      1 
 0      4     -1 
 0      3     -2 
 0      1     -2 
 0      0     -1 
unorderEnd
orderStart
 0      1      2 
 0      3      2 
 0      4      1 
 0      4     -1 
 0      3     -2 
 0      1     -2 
 0      0     -1 
 2      0      1 
orderEnd

unorderStart
 0     -2      2 
 0     -1      3 
 1      1      3 
 5      2      2 
 0      2      0 
 0      1     -1 
 0     -1     -1 
 0     -2      0 
unorderEnd
orderStart
 0     -2      2 
 0     -1      3 
 0      2      0 
 0      1     -1 
 0     -1     -1 
 0     -2      0 
 1      1      3 
 5      2      2 
orderEnd

unorderStart
 0     -1      4 
 0      0      5 
 0      2      5 
 2      3      4 
 0      3      2 
 0      2      1 
 0      0      1 
 0     -1      2 
unorderEnd
orderStart
 0     -1      4 
 0      0      5 
 0      2      5 
 0      3      2 
 0      2      1 
 0      0      1 
 0     -1      2 
 2      3      4 
orderEnd

unorderStart
 0      1      5 
 0      2      6 
 0      4      6 
 0      5      5 
 0      5      3 
 1      4      2 
 4      2      2 
 0      1      3 
unorderEnd
orderStart
 0      1      5 
 0      2      6 
 0      4      6 
 0      5      5 
 0      5      3 
 0      1      3 
 1      4      2 
 4      2      2 
orderEnd

unorderStart
 0      2      3 
 0      3      4 
 0      5      4 
 0      6      3 
 0      6      1 
 0      5      0 
 2      3      0 
 0      2      1 
unorderEnd
orderStart
 0      2      3 
 0      3      4 
 0      5      4 
 0      6      3 
 0      6      1 
 0      5      0 
 0      2      1 
 2      3      0 
orderEnd

unorderStart
 1      1      1 
 3      2      2 
 0      4      2 
 0      5      1 
 0      5     -1 
 0      4     -2 
 0      2     -2 
 0      1     -1 
unorderEnd
orderStart
 0      4      2 
 0      5      1 
 0      5     -1 
 0      4     -2 
 0      2     -2 
 0      1     -1 
 1      1      1 
 3      2      2 
orderEnd

unorderStart
 0     -1      2 
 2      0      3 
 0      2      3 
 0      3      2 
 0      3      0 
 0      2     -1 
 0      0     -1 
 0     -1      0 
unorderEnd
orderStart
 0     -1      2 
 0      2      3 
 0      3      2 
 0      3      0 
 0      2     -1 
 0      0     -1 
 0     -1      0 
 2      0      3 
orderEnd

unorderStart
 0     -2      4 
 0     -1      5 
 0      1      5 
 1      2      4 
 2      2      2 
 0      1      1 
 0     -1      1 
 0     -2      2 
unorderEnd
orderStart
 0     -2      4 
 0     -1      5 
 0      1      5 
 0      1      1 
 0     -1      1 
 0     -2      2 
 1      2      4 
 2      2      2 
orderEnd

unorderStart
 0      0      5 
 0      1      6 
 0      3      6 
 0      4      5 
 2      4      3 
 0      3      2 
 0      1      2 
 0      0      3 
unorderEnd
orderStart
 0      0      5 
 0      1      6 
 0      3      6 
 0      4      5 
 0      3      2 
 0      1      2 
 0      0      3 
 2      4      3 
orderEnd

unorderStart
 0      2      4 
 0      3      5 
 0      5      5 
 0      6      4 
 0      6      2 
 0      5      1 
 1      3      1 
 1      2      2 
unorderEnd
orderStart
 0      2      4 
 0      3      5 
 0      5      5 
 0      6      4 
 0      6      2 
 0      5      1 
 1      3      1 
 1      2      2 
orderEnd

unorderStart
 0      1      2 
 0      2      3 
 0      4      3 
 0      5      2 
 0      5      0 
 0      4     -1 
 0      2     -1 
 1      1      0 
unorderEnd
orderStart
 0      1      2 
 0      2      3 
 0      4      3 
 0      5      2 
 0      5      0 
 0      4     -1 
 0      2     -1 
 1      1      0 
orderEnd

unorderStart
 0     -1      1 
 0      0      2 
 0      2      2 
 0      3      1 
 0      3     -1 
 0      2     -2 
 0      0     -2 
 0     -1     -1 
unorderEnd
orderStart
 0     -1      1 
 0      0      2 
 0      2      2 
 0      3      1 
 0      3     -1 
 0      2     -2 
 0      0     -2 
 0     -1     -1 
orderEnd

我认为第一列是按降序排列的,但其他两列发生了什么情况?行? Java 代码不必使用泛型或任何东西,事实上,代码越简单越好。任何帮助将不胜感激,如果您愿意,请解释代码?谢谢

原来 Arrays.sort 可以使用编码器可以自定义的比较器。请注意,这基本上是我根据大部分评论(至少试图帮助我理解的所有内容)制作的最终产品。非常感谢!

public static void reorder(int[][] a){
Arrays.sort(a, new Comparator<int[]>() {
    @Override
    public int compare(final int[] a, final int[] b) {
         Integer c = Integer.valueOf(a[0]);
         Integer d = Integer.valueOf(b[0]);
        return c.compareTo(d);
    }
    });
}