Allgemein: Array sortieren, bei unbestimmter Arraygröße

ALCx

Commander
Registriert
Okt. 2001
Beiträge
2.922
Jo, mir kommts nicht so direkt auf die Programmiersprache an, sondern mehr ums Prinzip. Mittlerweile hab ich rausgefunden, wie man Arrays einer bestimmten, festgelegten Größe sortiert(bei der Ausgabe von der kleinsten Zahl zur größten Zahl). Ein von der Größe(z.B. 10 Werte) festgelegtes Array lässt sich sortieren, indem man Array[1] mit Array[2] vergleicht...ist Array[2] kleiner, werden die beiden Array-Inhalte getauscht. Danach kommt das selbe bei Array[2] und Array[3], danach [3] und [4] usw. Lässt man das ein paar mal durch eine Schleife durchlaufen, kann man Array[0]-Array[9] ausgeben, und bekommt die Werte von der kleinsten Zahl bis zur Größten Zahl ausgegeben.

Mein Problem was mich heut schon den ganzen Tag beschäftigt ist aber folgendes:

Wie muss das aussehen wenn keine feste Arraygröße angegeben werden kann?

Beispiel:
Benutzer gibt beliebig viele Zahlen ein. Diese werden in ein Array geschrieben. Ziel ist es nun, die Werte im Array zu sortieren, und die Werte so auzugeben, von der kleinsten zur größten Zahl.

Ist eine feste Arraygröße angegeben, kann man dies durch if Anweisungen in einer Schleife lösen. Dieses kann man aber nicht bei einer unbestimmten Array Größe machen...kurz gesagt mir ist keine Lösung eingefallen.

Es gibt sicher Header Dateien die dies können, ich will das aber selbst hinkriegen ;) . Habe das so auch schon so gelöst mit Klassen(Vererbung) so gesehen, allerdings war der Code dazu ~130 Zeilen lang. Kurz gesagt in der Hälfte und einfacher muss das realisierbar sein :D , wenn ich nur wüsste wie. Jemand ne Idee ^^?
 
ich versteh ehrlich gesagt nicht, wo du ein Problem siehst!? um nach deinem Algorhytmus vorzugehen:

in PHP zB mit count() die Größe des Arrays feststellen

danach in einer Schleife die Werte der Reihe nach miteinander vergleichen und gegebenenfalls tauschen, in einer Variable speichert man, ob ein Tausch stattgefunden hat, falls ja Schleife ein weiteres mal durchführen

wird kein Tausch mehr durchgeführt ist das Array sortiert und muss nicht nochmal durchsucht werden

ich mach noch ein Bsp.:

PHP:
<?
// Zufallswerte in einem Array zufälliger Größe speichern
for ( $i=0; $i<rand(0,1000); $i++ ) $zahlen[$i] = rand(0,100000);

// Größe des Arrays feststellen
$groesse = count ( $zahlen );

// Sortierschleife so oft durchführen, bis alle Werte der Größe nach sortiert sind
$sortiert = false;
do {
  $sortiert = true;
  for ( $i=0; $i<$groesse-1; $i++ ) {
    // Falls Wert größer als Nachfolger, Werte austauschen
    if ( $zahlen[$i+1] < $zahlen[$i] ) {
      $puffer = $zahlen[$i+1];
      $zahlen[$i+1] = $zahlen[$i];
      $zahlen[$i] = $puffer;

      $sortiert = false;
    }
  }
} while ( $sortiert == false );

// Array sortiert
?>
 
Zuletzt bearbeitet:
Achtung billiger Trick :

Wenn die Eingabe beendet ist, hänge automatisch ein festgelegtes Symbol an das Arrayende. Dann kannst du mit deinem Sortiersystem aufhören, wenn du den letzten Wert mit dem Symbol vergleichst.

Jaja, isn bisschen Banane, aber es ist spät und der Alkoholpegel ist hoch ;-)

Ansonsten lege ich dir Quicksort, Heapsort und Konsorten ans Herz irgendwie kriegt man das schon hingetüddelt.
 
Während es in vielen Sprachen Funktionen gibt, mit denen man die größe eines Array bestimmen kann, weiß ich nicht, ob es sowas in C gibt (da du von header-Dateien redest). Das Vorgehen ist immer das selbe. Man bestimmt die Array-Größe und sortiert wie mit einem Array fester Größe.
 
Jo danke. Hab es hinbekommen :) , wobei mir dein Code da oben den Weg gezeigt hat. Hab so ein Beispiel da nicht gefunden... Hab einfach ne Variable bei der Eingabe mitzählen lassen, somit hat sich das Bestimmen der Arraygröße auch erledigt.
 
der algorithmus den du da beschreibst ist aber ein wenig ineffizient. er nennt sich bubble-sort algorithmus. wenns um grosse datenmengen geht, und schnell gehen soll, schau dir mal andere effiziente algorithmen ala quick-sort an!
 
Es geht mir mehr darum, das es mit einfachen Mitteln überhaupt funktioniert. Dient lediglich zum Festigen grundlegender Dinge, sprich für mich als Übung. In der Sprache die ich lerne, gibt es sicher diverse, bereits fertige Algorithmen für sowas. Nunja...bis ich dahin komme dauerts aber noch ne ganze Weile ;) .
 
Kleiner Hinweis, such mal nach dem Merge-Sort Algorithmus (Google)

Dann hast du wenigstenz einen effizienten (zeit)....
 
Zurück
Oben