我是一個相當新的編碼器。我想了解以下Ç代碼:如何將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代碼。 –