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. ]


Anmelden zum Antworten