Zitat:
Jetzt kommt natürlich mal wieder mein Unwissenheit über den Aufbau eines Arrays.
Ist es so, dass bei einem einem einfachen Array Data [MAX_DATA_LENGTH] 200 Nullen reserviert werden?
Bei "new Data[MAX_DATA_LENGTH] = { 0, ... }" ist das sicher so. Ob Small standardmäßig alles mit 0 initialisiert, weiß ich nicht. Gut möglich, daß die Einträge auch irgendwelche "zufälligen" Werte haben - die Werte die der Speicher an der Adresse halt grad hatte.
Zitat:
Wenn ich jetzt den String "Maria" habe und diesen in Data kopiere, wie sieht der Array dann aus?
So? : Data['M','a','r','i','a',0] (=>war die 0 die Terminierung?)
oder stehen da eben auch Zahlen drin? Sind dann 194 reservierte Stellen ungenutzt?
Klar stehen da Zahlen drin. 'M', 'a', 'r', usw. sind ja alles zahlen. Das Array wird dadurch nicht kleiner, wenn du das meinst. D.h. 194 Stellen sind ungenutzt (die 0 ist ja genutzt, als Terminierung). Ab der 0 wird einfach nur der Rest des Arrays ignoriert, existiert aber noch, belegt Speicher.
Zitat:
Bei dem Quicksort Beispiel, welches ich mir angeschaut habe, war eine Zahlen Reihe im Array a gespeichert. (0,1,5,8,7,9)
Um diese zu sortieren, wurde jetzt der Array in 2 Hälften geteilt. Linke und Rechte Seite. Diese beiden Seiten wurden getrennt sortiert und nachher wieder zusammenkopiert. Vorher noch überprüft ob rechts<links. Wenn kleiner , dann wurde links mit rechts vertauscht.
(Ich hoffe, so habe ich das richtig verstanden.)
Getrennt und nacher zusammenkopiert stimmt nicht ganz. Die Funktion arbeitet Rekursiv, d.h. sie ruft sich selbst auf. Alle Instanzen der gleichen Funktionen arbeiten jedoch mit dem gleichen Array, d.h. da werden keine Arrayteile kopiert und wieder zusammengefügt oder so.
(*)
Das erste Element eines Teils dient als Vergleicher; alle anderen Elemente des Teils werden mit diesem verglichen und anhand des Ergebnisses in einen positiv und in einen negativ-Teil geschoben. (z.B. ist die Zahl größer (positiv) oder kleiner-gleich (negativ)). Dabei werden Elemente des Arrays miteinander vertauscht, bis der Vergleicher in der Mitte zwischen Positiv- und Negativ-Teil liegt und damit "sortiert" ist.
Positiv- und Negativ-Teil sind wieder Array-Teile. Bitte bei (*) weiterlesen um zu erfahren wie mit jedem einzelnen von diesen vorgegangen wird.
Das ganze Spiel hört erst auf, wenn ein Teil nur noch aus einem oder weniger Elementen besteht. Da jedes Element sortiert wurde (mit jedem Durchgang wird ja ein Element sortiert, siehe oben) ist das komplette Array sortiert.
Zitat:
Aber, ich habe ja eine Liste mit Namen. Daher hatte ich auch einen 2-dimensionalen Array gewählt, da ich denke, dass so nur eine Reihenfolge hinzubekommen ist.
Das ist ja richtig so. Dein Array ist also { "Anton", "Hubert", "Olaf", "Berta }.
Zitat:
Das Aufteilen der MAX_ENTRIES in Links und Rechts ist ok. Jetzt muss ich aber nicht MAX_ENTRIES sortieren, sondern den MAX_DATA_LENGTH, da ich ja bisher noch annehme, das dort die Strings drin stehen.
Moment. MAX_DATA_LENGTH ist doch die Länge deiner Strings, oder bin ich jetzt falsch? Die willst du doch nicht sortieren (also aus "Berta" "aBert" machen oder so). Du willst nur die Reihenfolge der Namen aendern, also MAX_ENTRIES, wobei du aufpassen musst - die Arraygröße ist statisch, d.h. nicht jedes Element deines Arrays muss ein String sein.
Code:
5 Strings in einem data[10][10]; - Array:
{
{'A', 'n', 't', 'o', 'n', 0, 0, 0, 0, 0},
{'B', 'e', 'r', 't', 'a', 0, 0, 0, 0, 0},
{'C', 'r', 'i', 's', 't', 'o', 'f', 0, 0, 0},
{'D', 'u', 0, 0, 0, 0, 0, 0, 0, 0},
{'E', 'e', 'r', 'i', 'e', 0, 0, 0, 0, 0}, /* == "Eerie" */
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* == "" */
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
}
Bei ner Sortierung würds dir da womöglich die "" - Strings nach vorne hauen.
Zitat:
Auch wenn es Euch sehr viel Mühe macht, habt ein Herz und versucht es mir zu erklären.
Quicksort kann man schlecht erklären, vielleicht bin ich auch schlecht im Erklären, es klingt immer so kompliziert. Am besten ist es wenn du dich mal mit einem kleinen Array (6 Elemente) an ein Blatt Papier setzt und es mit der Quicksort-Methodik im Kopf - auf Papier - durchsortierst.
Mein Code von oben sollte dir da weiterhelfen.