Array und Bubble Sort oder ähnliches Sortieren



  • Hallo,

    Ich habe folgendes Problem:
    Im Moment lese ich mit meinem Programm 2 Arrays ein ( X[i], Y[i] ) und lasse mir diese in einer Datei ausgeben.
    Nun möchte ich allerdings, die x[i] der Größe nach sortieren und die Y[i] in gleicherweise sortieren wie die X[i] - sprich, die Paare aus X[i],Y[i] sollten die gleichen bleiben (Wie bei Funktionen von x und dem zugehörigen Funktionswert!).

    Zusatz-Info: Die Größe meiner Arrays lege ich vorher fest, indem ich mir die Werte mit find_string etc zählen lasse ... im Prinzip liegen sie aber immer so bei ca. 6 Werten pro Feld, also nicht gerade groß.

    Ich hoffe, dass mit hier jemand weiterhelfen kann... ich habe es schon mit einer Art Bubble Sort versucht, bekomme das ganze aber nicht so hin, wie ich das möchte.

    MfG,
    Freddchen0815 🙂



  • Wo ist das Problem? Du sortierst X ganz normal, und wenn du Elemente von X vertauschst, vertauschst du dieselben Elemente von Y gleich mit.



  • Für die Paare:

    Du musst sichergehen, daß die beiden Arrays genau gleich groß sind. Dann implementiere einen Bubblesort (http://de.wikipedia.org/wiki/Bubblesort) über das X-Array.

    Jetzt kommt der Trick: Statt nur x[i] und x[i+1] zu tauschen, tauschst du einfach auch noch y[i] und y[i+1]. Die Beispielimplementierung in C in der Wikipedia sähe dann beispielsweise SO aus:

    ...
    if ( x[i] > x[i+1] )
    {
      temp = x[i];
      x[i] = x[i+1];
      x[i+1] = temp;
      temp = y[i];
      y[i] = y[i+1];
      y[i+1] = temp;
    }
    ...
    


  • Beim BubbleSort und änhlichen Verfahren mußt du nur immer darauf achten, daß du die Y-Werte parallel miut den X-Werten vertauschst (d.h. aus der Anweisung "swap(X[i],X[j]);" im eigentlichen Algorithmus wird "swap(X[i],X[j]);swap(Y[i],Y[j]);"). Aber besser wäre es wohl, beide Arrays zu einem zusammenfassen (in dem dann pair<>s drinstehen).



  • Hallo,

    Danke für eure Hilfe.
    Leider funktioniert das Verfahren bei mir nicht so richtig.
    Aufsteigend zu sortieren funktioniert bei mir mit Bubble sort glaube ich deshalb nicht, weil bei mir der 2. wert der größte ist.
    Ich habe dann versucht einfach absteigend zu sortieren, aber es klappt auch nicht richtig.
    Die ersten Zahlen werden richtig sortiert, aber dann gerät es irgendwie durcheinander.

    Quellcode:
    for (i=0; i<(nx-1); i++)
    {
    if (X[i+1] > X[i])
    {
    temp = X[i];
    X[i] = X[i+1];
    X[i+1] = temp;
    temp = Y[i];
    Y[i] = Y[i+1];
    Y[i+1] = Y[i];
    }
    }

    und mein ergebnis: (zum Vergleich habe ich oben noch die ursprüngliche reihenfolge ausgeben lassen!)

    ursprünglich:

    )XValues
    1.928209E-01
    2.102128E-01
    1.575383E-01
    1.812379E-01
    1.051442E-01
    1.832710E-01
    )FValues
    1.000000E+00
    9.618971E-01
    1.017263E+00
    1.013645E+00
    8.868912E-01
    1.002328E+00

    sortiert:
    )XValues
    2.102128E-01
    1.928209E-01
    1.812379E-01
    1.575383E-01
    1.832710E-01
    1.051442E-01
    )FValues
    9.618971E-01
    9.618971E-01
    1.013645E+00
    1.013645E+00
    1.002328E+00
    1.002328E+00

    Wäre super, wenn ihr mit weiterhelfen könntet. Es muss ja auch nicht unbedingt mit bubble sort sein, dachte nur, dass das evtl am einfachsten sei... 😞

    MfG,
    Freddchen0815 🙂



  • freddchen0815 schrieb:

    Es muss ja auch nicht unbedingt mit bubble sort sein, dachte nur, dass das evtl am einfachsten sei... 😞

    Das ist schon richtig. Allerdings reicht es nicht aus, diese Schleife nur einmal zu durchlaufen. Du musst das wiederholen, bis du nichts mehr zum Vertauschen findest. Du kannst bei jedem weiteren Durchlauf ein Element früher aufhören, aber das muss für den Anfang nicht sein.



  • Danke!
    Diese Einsicht ist mir auch vorher gekommen... bin gerade dabei mir eine geeignete Schleife um das Bubble Sort herum zu überlegen, die abbricht, wenn nicht mehr getauscht wurde.
    Kannst du mir da eventuell weiterhelfen?
    Wäre klasse!

    Grüße,
    Freddchen0815



  • Normalerweise gehört diese Schleife ja zum BubbleSort dazu 😉


Anmelden zum Antworten