Hallo,
ich habe mich auch gerade mit mergesort herumgeaegert, aber es ist in meinem Fall (bisher) das schnellste, was ich zustande gebracht habe.
Du musst Dir vorstellen wie Du die Daten zusammenfuehren willst und was Du geschrieben hast:
Du willst Die zwei Haelften aus Sortfeld ins Hilfsfeld kopieren.
Du benutzt m als Index fuer die obere Haelfte und a fuer die untere.
Du willst die Daten aus dem unteren Feld SortFeld[a] ins Hilfsfeld schreiben, sowie Sie kleiner als das momentane Element SortFeld[m] ist.
Du moechtest damit aufhoeren a zu erhoehen, wenn a = Mitte ist.
Aber jetzt kommt der Fehler, wenn Sortfeld[mitte] auch kleiner als Sortfelf[m] ist, dann schreibst Du fleissig in Hilfsfeld[i] = Sortfeld[mitte].
Zum Beispiel schon aufsteigend sortiert:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| Sortfeld = (1,2,3,4,5,6) a= 0 ,mitte= 5 div 2 = 2; m=3 i a m S[a] S[m] H[i] 0 0 3 1 4 1 S[a]< S[m] a wird erhoeht 1 1 3 2 4 2 S[a]< S[m] a wird erhoeht 2 2 3 3 4 3 S[a]< S[m] a wird nicht mehr erhoeht 3 2 3 3 4 3 S[a]< S[m] a wird nicht mehr erhoeht 4 2 3 3 4 3 S[a]< S[m] a wird nicht mehr erhoeht 5 2 3 3 4 3 S[a]< S[m] a wird nicht mehr erhoeht 6 2 3 3 4 3 S[a]< S[m] a wird nicht mehr erhoeht |
Das ist eben beim sortieren durch mischen so.
Wenn man ein Feld leergeraeumt hat muss man die Schleife verlassen und das jeweilige Restfeld einfach nur noch Stueck fuer Stueck in das Hilfsfeld uebertragen.
Es gibt eine schoene Variante, bei der man mit einem Hilfsfeld halber Groesse arbeitet, und sich keine Gedanken mehr machen braucht, welches Haelfte geread leergeraeumt wurde.
Einfach
hier mal durchlesen und mit der Maus die richtigen Zahlen anklicken.
Gruss Horst