2016-11-12 5 views
0
void sort_records_by_id (int []indices, int []students_id) 
{ 
for (int k = 1; k<students_id.length; k++) 
{ 

    for (int j = k; j>0 && students_id[j]<students_id[j-1]; j--) 
    { 
    int place_holder = indices[j]; 
    indices[j] = indices [j-1]; 
    indices[j-1] = place_holder; 
    } 
} 
} 

Hallo,Einfache Sortierfunktion funktioniert nicht. Vorschläge?

Ich habe eine Funktion erstellen, die die Lage ist, eine Reihe von ganzen Zahlen zu sortieren, nicht durch Änderung und ihre Inhalte neu anordnen, sondern durch die Reihenfolge der ganzen Zahlen in einem anderen Array von ganzen Zahlen zu ändern genannt Indizes. Also, ich hätte ein Array mit einer Reihe von IDs wie: Lassen Sie uns diese ID aufrufen "[#] steht für Index [0] 10001 12001 2 12334 [3] 14332 [4] 999999 [5] 10111 Es gibt ein entsprechendes Array , mit ganzzahligen Werten [#] ist der Index Lets call this arr [0] 0 11 [2} 2 [3] 3 [4] 4 [5] 5 Damit sie den Indizes entsprechen, die wir in dem anderen Array haben Nun müssen wir die Reihenfolge von "arr" ändern, so dass die Elemente in einer solchen Reihenfolge angeordnet sind, dass sie der Reihenfolge der Indizes in Array-ID in sortierter Reihenfolge entsprechen. Beachten Sie, dass die Array-ID in keiner Weise geändert wird. wir können die IDs an die Konsole Druckreihenfolge in aufsteigender, von einer for-Schleife, die Werte von arr und Array-ID.

enter image description here

Bitte, ich würde mich sehr freuen, wenn Sie in der Lage wären, Ratschläge zu geben, ohne eine sehr komplexe Funktion zu erzeugen. Ich möchte nur meine bestehende Funktion ändern, die ich erstellt habe, damit es funktioniert.

Dies ist die Ausgabe meiner Funktion bisher: enter image description here

Jede Eingabe oder Anregungen würde sehr geschätzt werden.

+0

Wählen Sie eine Sprache. –

+0

Ist das eine Java oder eine C++ Frage? Bitte entscheide dich. – nhouser9

+0

Verarbeitung wenn möglich. Wenn nicht als C++ verarbeitet wird, bitte. Aber nicht zu kompliziert. –

Antwort

0

Verwenden Sie bei der Indexierung von students_id array nicht j und j-1, sondern stattdessen -> Indizes [j] und Indizes [j-1]. Dank dessen werden Sie die Reihenfolge im Array "Indizes" mit dem Array "students_id" ändern, um Werte für den Vergleich zu erhalten.

for (int j = k; j>0 && students_id[indices[j]]<students_id[indices[j-1]]; j--) 

Auch ich würde Schleife ändern in

void sort_records_by_id (int []indices, int []students_id) 
{ 
for (int k = 1; k<students_id.length; ++k) 
{ 

    for (int j = 0; j<k; ++j) 
    { 
    if(students_id[indices[j]]>students_id[indices[j+1]]) { 
     int place_holder = indices[j]; 
     indices[j] = indices [j+1]; 
     indices[j+1] = place_holder; 
    } 
    } 
} 
} 

Die einfachste Art Blase - das ist, was mir in den Sinn kommt.

+0

Vielen Dank für den Vorschlag. Ich schätze es sehr. Allerdings bekomme ich 0 5 8 7 2 3 1 6 9 4, was offenbar nicht die richtige Antwort ist. Nochmals vielen Dank, ich schätze den Einblick –

+0

Ich habe auch einen Vorschlag über Loop-Bedingung hinzugefügt. –

+0

Ich habe eine Frage an Sie. So erfahren Sie, dass die Reihenfolge in der Konsolenausgabe [0] 0 [1] 2 [2] 1 [3] 3 [4] 5 [5] 4 ... richtig ist? Wenn ich versuche, es selbst zu bestellen, bekam ich: [index] student_id - >>> [0] 10001 [1] 10111 [2] 10332 [3] 12034 [4] 12334 [5] 14332 [6] 20001 [7] 20101 [8] 99991 [9] 99999 Das ist 0 5 8 7 2 3 1 6 9 4 Wie Sie im vorherigen Kommentar erwähnt haben –