我是一个相当新的编码器。我想了解以下Ç代码:如何将qsort从C转换为Java?
int compar (const void *a, const void *b)
{
return ((int *) a)[0] - ((int *) b)[0];
}
被用于:
qsort (&tree[0][0], 8, 3 * sizeof (int), &compar);
树是一个二维数组,这是专门为这种情况下,8×(它被填满可能的举措,但我认为这对于学习这个目的是无关紧要的)。我理解qsort的前三个参数(尽管第一个调用地址的原因有点不确定,但我认为这就是C调用数组的原因),但不是第四个参数。我不明白qsort如何使用compar。我想设计一个与上述qsort相同的排序方法,虽然我并不真正关心它本身是快速排序的(因为我可以自由地利用Java提供的任何东西,因为这不是一个任务,所以我只想要一个快速排序的排序方法,这样一个nlogn或者其他东西会很有帮助,因为这个项目涉及很多递归并且调用了很多次) 。我正在努力理解比较器在做什么,然后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代码不必使用泛型或任何东西,事实上,代码越简单越好。任何帮助将不胜感激,如果你愿意,请解释代码?谢谢
它返回'a'和'b'之间的差异。 '((int *)a)''将'a'转换为一个int指针,数组语法'[0]'是取消引用该指针来获得一个int。它可以被重写为*((int *)a);' –
我得到a和b将是第一列元素,但我不明白它的实现。其他两列如何改变? – user7413060
发布您迄今为止编写的Java代码。 –