如何将qsort从C翻译成Java?

如何将qsort从C翻译成Java?,java,c,compare,translate,qsort,Java,C,Compare,Translate,Qsort,我是一个相当新的程序员。我试图理解以下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代码:

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的。我想设计一个与前面提到的qsort相同的Java排序方法,尽管我并不真正希望它本身就是快速排序(比如,我可以自由地利用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代码不必使用泛型或任何东西,事实上,代码越简单越好。如果您愿意,请解释代码。谢谢ort可以使用编码器可以定制的比较器。请注意,这基本上是我根据评论的大部分内容(试图帮助我理解的所有内容)制作的最终产品。非常感谢

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);
    }
    });
}
publicstaticvoidreorder(int[]a){
sort(一个新的比较器(){
@凌驾
公共整数比较(最终整数[]a,最终整数[]b){
整数c=整数。valueOf(a[0]);
整数d=整数。value of(b[0]);
返回c.compareTo(d);
}
});
}

它返回
a
b
之间的差异((int*)a将
a
强制转换为int指针,数组语法
[0]
取消对该指针的引用以获得int。它可以重写为
*((int*)a)
我知道a和b将是第一列元素,但我不理解它的实现。其他两列是如何变化的?发布您迄今为止编写的java代码。关于
nlogn
sort,您也可以尝试Heapsort和Mergesort。根据我的经验,“翻译”不是一个好主意从一种语言“直接”转换到另一种语言。使用代码背后的算法并在目标语言中实现。源语言可能使用不适用于目标语言的结构和方法。特别是对于C代码,可能已经有大量代码可以从java LIB中使用,这些代码是C中的样板代码。