Я довольно новый кодер. Я пытаюсь понять следующее C код:Как перевести 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);
дерево является 2D массив, это специально 8x3 для этого случая (он наполняется возможные шаги, но я думаю, что это не имеет значения для изучения этого). Я понимаю первые три параметра qsort (хотя и немного, что почему первый вызывает адрес, но я думаю, что именно так C вызывает массив), но не четвертый. Я не понимаю, как qsort использует сравнение. Я хочу разработать метод сортировки Java, который выполняет те же действия, что и вышеупомянутый qsort, хотя мне не важно, чтобы он был быстрым, как таковой (так как я могу свободно использовать любую предлагаемую Java-версию, t должен быть быстрым. Поскольку это не назначение, я просто хочу метод сортировки, который может сортироваться быстро, поэтому 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)' casts 'a' для указателя int, синтаксис массива' [0] 'разыменовывает этот указатель для получения int. Его можно было бы переписать как '* ((int *) a);' –
Получаю, что a и b будут первыми элементами столбца, но я не понимаю его реализации. Как происходит изменение двух других столбцов? – user7413060
Опубликовать код Java, который вы написали. –