我是一个相当新的编码器。我正在尝试理解以下 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是如何使用比较的。我想设计一个与上述Qsort相同的排序方法 java ,尽管我真的不在乎它是快速分类的(因为我可以自由地使用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代码不必使用仿制药或任何东西,而事实上,代码越简单,越好。任何帮助将不胜感激,如果您愿意,请解释代码?谢谢
事实证明,数组可以使用编码器可以自定义的比较器。请注意,这基本上是我基于大部分内容所评论的最终产品(至少试图帮助我理解的所有内容)。非常感谢!
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);
}
});
}