Forum: Mikrocontroller und Digitale Elektronik GCC; ATMega48: 8 Zahlen (16-Bit Integer) schnell sortieren


von Sortie (Gast)


Lesenswert?

Wie im Betreff aufgeführt sind acht 16-Bit Integer schnell zu sortieren.

Bis jetzt habe ich folgende Algorithmen probiert:

Quicksort    1100 Zyklen
Countingsort  900 Zyklen
Insertionsort 700 Zyklen

Was kann ich an Algorithmen noch ausprobieren. Möchte unter 500 Zyklen 
kommen.

von Peter II (Gast)


Lesenswert?

Zeige mal den code, für 8 stück kommt mir das recht langsam vor. Nicht 
das der code selber nicht optimal ist.

von Jim M. (turboj)


Lesenswert?

Probiere mal den einfachsten: BubbleSort.

von Falk B. (falk)


Lesenswert?

Hmmm, für gerade mal 8 Stück kann man doch alles direkt ohne Indexe 
hinschreiben. Ich denke da an einen binären Sortierbaum. Zuerst index 
0/1 Vergleichen und sortieren, dann 2/3, 4/5, 6/7. Diese Teilmengen sind 
dann sortiert. Dann sortiert je zwei Teilmengen untereinander. Zu guter 
Lettzt nochmal.

Wenn man es in Assembler macht, kann man alle 8 Zahlen in Registern 
halten und schnell vergleichen.

http://de.wikipedia.org/wiki/Sortierverfahren

http://de.wikipedia.org/wiki/Mergesort

von c-hater (Gast)


Lesenswert?

Sortie schrieb:

> Wie im Betreff aufgeführt sind acht 16-Bit Integer schnell zu sortieren.
>
> Bis jetzt habe ich folgende Algorithmen probiert:
>
> Quicksort    1100 Zyklen
> Countingsort  900 Zyklen
> Insertionsort 700 Zyklen
>
> Was kann ich an Algorithmen noch ausprobieren. Möchte unter 500 Zyklen
> kommen.

Also ich komme schon mit einem primitiven Bubblesort auf 311 Takte max. 
inclusive rcall/ret und Retten/Wiederherstellen aller benutzten 
Register. Der eigentlich Algorithmus dauert 232 Takte max.

Der von Falk vorgeschlagene MergeSort dürfte nochmal etwas schneller 
sein, allerdings erfordert er auch erheblich mehr Tipparbeit, dazu hatte 
ich keine Lust mehr. Ich schätze mal, so irgendwas bei 180 Takten max. 
für den eigentlichen Algorithmus würden wohl rauskommen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.