BubbleSort Struktur



  • Hallo, ich würde gerne bei einer Struktur, die Informationen über Städte enthält (Name, Länderkürzel, Einwohnerzahl) die Liste nach Namen sortieren.

    Habe das mit BubbleSort implementiert, jedoch bleibt die Liste nach dem "Sortiervorgang" unverändert. Hoffe jemand kann mir einen Hinweis geben.

    void BubbleSort(struct City_s city[], long len)
    {
        long i, j;
        char h[len];
    
        for(j=len-1;j>0;j=j-1)
        {
            for(i=0;i<j;i=i+1)
            {
                if(city[i].name>city[i+1].name)
                {
                    // TAUSCHE
                    strcpy(h,city[i].name);
                    strcpy(city[i].name,city[i+1].name);
                    strcpy(city[i+1].name,h);
                }
            }
        }
    }   // end BubbleSort
    

    Fehlermeldungen bekomme ich soweit keine.



  • if(city[i].name>city[i+1].name)
    ich nehme mal an, dass name ein C-String ist. C-Strings kann man so nicht vergleichen, dazu braucht man zB strcmp.



  • Schau Dir mal

    void qsort(
       void *base,
       size_t num,
       size_t width,
       int (__cdecl *compare )(const void *, const void *) 
    );
    

    aus stdlib.h an.

    Die Vergleichsfunktion baust Du Dir dann gemäß Bellis Tip (Zeichenketttenvergleich)



  • oh man, natürlich strcmp :x

    danke für eure tipps, ich werd mir beide versionen genau anschauen 🙂



  • Wofür ist denn der Parameter len da?

    Was passiert wohl bei char h[len]; (Zeile 4) wenn du nur wenige (z.B. 3) Elemente in deinem Array hast?

    Welche Elemente gibt es noch in struct City_s?
    Die musst du mittauschen.

    Ist City_s.name als Array oder Pointer angelegt?



  • ich hab die Funktion in einem eigenen Programm getestet, wo ich nur name[] in der Struktur habe, und siehe da, es funktioniert. es liegt natürlich daran, dass ich in der Struktur name, länderkürzel + einwohnerzahl stehen habe, und im bubble-sort nur den namen vertausche und nicht alle attribute.



  • Und deshalb kann man auch gleich das ganze Strukturelement vertauschen

    if( strcmp(city[i].name,city[i+1].name)>0 )
                {
                  struct City_s x=city[i];
                  city[i]=city[i+1];
                  city[i+1]=x;
                }
    


  • ihr seid echt legen.... där!

    bin erst dabei das zu lernen, und manche sachen stehen dann nicht im buch und da ist das forum einfach top 😃

    vielen dank


Anmelden zum Antworten