Liebe Alle,
ich versuche ein Array auf meinem Atmega32 zu sortieren und verwende die
(auf das zweidimensionale array angepasste) Codegrundlage von
http://www.rn-wissen.de/index.php/Codevergleich_AVR-Compiler#Sortieren_mit_Bubble-Sort
Zielvorgabe ist vorerst nach dem ersten Wert sortieren zu lassen.
Ich rufe sort_toplist() in einer anderen Funktion auf und lass mir die
Werte dann auf einem Display ausgeben. Leider sortiert die Funktion gar
nichts. Hat jemand einen Tipp, was ich falsch mache?
Das array ist global definiert.
abgesehen vom Durcheinander, den du mit den Datentypen angestellt hast,
sollte das schon funktionieren (auch wenn sich deine rem Werte
zwischendurch verändern)
Zeig mal den Rest. Kann es sein, dass du die Funktion gar nicht
aufrufst?
Im Endeffekt soll nach dem jeweiligen ersten Wert der Zehn Elemente der
ersten Etage sortiert werden.
{ {8,232},{2,344} ....
wird zu
{ {2,344},{8,232} ....
Verständlich?
Peter II schrieb:> du solltest erstmal sagen wie du ein 2 Dimensionen sortieren willst?> Macht doch überhaupt keinen sinn.
Sieh die 2 Dimensionen als die "Struktur des kleinen Mannes an".
Eigentlich will er
struct Wert
{
int key;
int Value;
};
und dann ein 10-er Array davon, sortiert nach key.
Nur weiß er noch nicht, dass es Strukturen gibt.
Karl Heinz Buchegger schrieb:> Peter II schrieb:>> und dann ein 10-er Array davon, sortiert nach key.> Nur weiß er noch nicht, dass es Strukturen gibt.
Ja, das könnte das Problem sein :)
Hans B. schrieb:> Der Rest sind leider doch über 1000 Zeilen, ich dachte eh nicht, dass> die jemand ansieht :)
Dann specks ab, mach ein Testprogramm in dem nur die Sortierung getestet
wird. Und wenns dann immer noch nicht geht, dann postest du eben dieses
Testprogramm.
Hans B. schrieb:> update_toplist();
sicher, dass die zeile und die zeile
Hans B. schrieb:> void sort_toplist (void)
richtig kopiert wurden? wenn ja, liegt genau hier das problem
(unterschiedliche funktionen) ...
Hans B. schrieb:> VIelen Dank. Mea culpa. Wie peinlich. Jetzt gehts.
Fast.
Deine Datentypen in der Sort-Funktion musst du noch bereinigen.
Einen int zwischendurch in einem char bzw. uint8_t ablegen kommt nicht
so prickelnd, wenn die Zahlen größer werden.
zb
1
rem=topliste_int[j_max][1];
links ('rem') vom = steht der Datentyp uint8_t
rechts ('topliste_int[j_max][1]') vom = steht der Datentyp int
Das passt nicht zusammen.
Hans B. schrieb:> Er zerpflückt den zweiten Teil des Datenkörbchens wirklich> durcheinander.>> Wenn ich rem als int deklariere, müsste es genügen?
Jetzt gehts aber in die Ratespielchen.
wenn du
i = j;
machen willst und dabei nichts verloren gehen soll, dann wäre es
wahrscheinlich eine extrem gute Idee, wenn i und j vom gleichen Datentyp
sind.
Bis jetzt ist es nicht aufgefallen, aber bei deinem max hast du das
gleiche Problem. wenn in deinem Array, das [][0] Element den Datentyp
int hat, dann wird es wohl nicht so prickelnd sein, wenn du max als char
definierst. Denn immerhin versuchst du ja darin diesen int auch mal
abzuspeichern.
1
max=topliste_int[j_max][0];
ist max aber ein char, dann wird das wohl in die Hose gehen, sobald der
Wert in topliste_int[j_max][0] nicht mehr in einen char passt.
(Und den Datentyp 'char' willst du schon gar nicht für irgendwas
verwenden, was nicht mit Textverarbeitung zu tun hat)