java - 如何将 qsort 从 C 语言转换为 Java 语言?

标签 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 调用数组的方式),但不理解第四个参数。我不明白 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 代码不必使用泛型或任何东西,事实上,代码越简单越好。任何帮助将不胜感激,如果愿意,请解释一下代码?谢谢

最佳答案

事实证明,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);
    }
    });
}

关于java - 如何将 qsort 从 C 语言转换为 Java 语言?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42362776/

相关文章:

java - ThreadPoolExecutor future 任务-Spring bean注入(inject)异常-spring-beans-2.0

c - 调试器报告 SDL 在初始化时生成的那些线程是什么?

在 Windows 上创建兼容 macOS 和 Linux 的静态库

html - Firefox 3 vs Firefox 4 开发差异?

java - 构造函数标识符不适用于三个对象

php - 将一个字符串与从 mysql 数据库中获取的另一个字符串匹配

java - Spring MVC 应用程序,尝试在 tomcat 上运行

java - 是否多线程任务?

java - 两次异步操作后更新 UI

c - Kochan InsertString 段错误