2017-02-21 3 views
0

Ich bin ein ziemlich neuer Programmierer. Ich versuche, den folgenden C Code zu verstehen:Wie übersetzt man einen qsort von C nach Java?

int compar (const void *a, const void *b) 
{ 
    return ((int *) a)[0] - ((int *) b)[0]; 
} 

, die in verwendet:

qsort (&tree[0][0], 8, 3 * sizeof (int), &compar); 

der Baum ist ein 2D-Array, das ist speziell ein 8x3 für diesen Fall (es wird gefüllt mit mögliche Bewegungen, aber ich denke, das ist irrelevant für den Zweck, dies zu lernen). Ich verstehe die ersten drei Parameter von qsort (obwohl ein bisschen zweifelhaft, warum der erste die Adresse anruft, aber ich denke, das ist, wie C das Array aufruft), aber nicht der vierte. Ich verstehe nicht, wie qsort compar verwendet. Ich möchte eine Java Sortiermethode entwerfen, die dasselbe wie das oben erwähnte qsort tut, obwohl es mir nicht wirklich wichtig ist, dass es schnell an sich sortiert wird (da ich frei habe, was auch immer Java anbietet und es nicht tut) Da es sich nicht um eine Aufgabe handelt, möchte ich nur eine Sortiermethode, die schnell sortiert werden kann, so dass ein nlogn oder etwas hilfreich sein kann, da dieses Projekt eine Menge Rekursion erfordert und oft aufgerufen wird. . Ich habe Mühe zu verstehen, was der Vergleich macht und wie qsort das zum Sortieren nutzt.

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 

Ich denke, dass die erste Spalte auf absteigende Weise sortiert ist, aber was passiert mit den anderen beiden Spalten? Die Reihen? Der Java-Code muss keine Generika oder irgendetwas anderes verwenden, je einfacher der Code, desto besser. Irgendwelche Hilfe würde geschätzt werden und wenn Sie würden, erklären Sie bitte den Code? Danke

+0

es gibt den Unterschied zwischen 'a' und' b' zurück. '((int *) a)' '' '' '' auf einen int-Zeiger, die Array-Syntax '[0]' deneferenziert diesen Zeiger, um einen int zu erhalten. Es könnte umgeschrieben werden als '* ((int *) a);' –

+0

Ich bekomme, dass a und b die ersten Spaltenelemente wären, aber ich verstehe seine Implementierung nicht. Wie ändern sich die anderen beiden Spalten? – user7413060

+1

Veröffentlichen Sie den Java-Code, den Sie bisher geschrieben haben. –

Antwort

0

Stellt sich heraus, dass Arrays.sort einen Komparator verwenden kann, den der Coder anpassen kann. Beachten Sie, das ist im Grunde das Endprodukt, das ich gemacht habe, basierend auf allem, was ich kommentiert habe (alles, was mir zumindest helfen wollte). Vielen Dank!

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); 
    } 
    }); 
} 
Verwandte Themen