GCC; ATMega48: 8 Zahlen (16-Bit Integer) schnell sortieren

Gast #3230397
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.
#3230427
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
Gast #3230689
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren