Sortierroutine optimieren
-
Hallo zusammen !
Ich habe mal eine kurze Sortierroutine für Byte-Werte geschrieben und in einem VS6-C++-Code eingebunden. Ich weiß, dass der ASM-Code nicht sehr effektiv ist, desshalb meine Frage: Wie kannich den ASM-Code optimieren? (bitte funktionsfähige Vorschläge !)
int _tmain(int argc, _TCHAR* argv[]) { char Array[] = {5,7,2,3,8,1,0,4,6,9}; int Laenge = sizeof(Array); for (int x = 0; x < Laenge; x++) cout << (int)Array[x]; cout << endl; _asm { xor eax,eax xor ebx,ebx l001: cmp eax,Laenge je l005 mov ebx,eax l002: mov dl,[byte ptr Array+eax] cmp dl,[byte ptr Array+ebx] jg l004 l003: inc ebx cmp ebx,Laenge jne l002 inc eax jmp l001 l004: mov dh,[byte ptr Array+ebx] mov [byte ptr Array+eax],dh mov [byte ptr Array+ebx],dl jmp l003 l005: } for (int x = 0; x < Laenge; x++) cout << (int)Array[x]; cout << endl; return 0; }
Danke im voraus, Gruß MacReeg
-
Warum unbedingt asm-Code? Wenns um Sortieren geht ist Quicksort nach wie vor immernoch die günstigste Variante (Quicksort auf Sedgewick-Art):
void quicksort(char data[], int l, int r) { int i, j; char v, temp; v = a[r]; i = l - 1; j = r; for (;;) { while (a[++i] < v) ; while (a[--j] > v) ; if (i >= j) break; temp = a[i]; a[i] = a[j]; a[j] = temp; } temp = a[i]; a[i] = a[r]; a[r] = temp; quicksort(data, l, i-1); quicksort(data, i+1, r); } //... quicksort(Array, 0, sizeof(Array)-1);
[ Dieser Beitrag wurde am 05.09.2002 um 00:23 Uhr von TriPhoenix editiert. ]