Projekt mit
1 €
unterstützen?
So geht das *:


Step 18 - Algorithmik :

Sortieren - BubbleSort-Algorithmus

Im folgenden soll der Bubblesort-Algorithmus näher erläutert werden.
Dieser Algorithmus sollte auch von einem Anfänger noch verstanden werden.

Zunächst mal ein Schaubild (ein s.g. Flussdiagram), das den Algorithmus allgemein beschreiben soll:






Nun in Delphi übersetzt, ergibt sich somit folgende Procedure:
var
  arr:Array of String; // sollte Unit-global deklariert werden

...

procedure Bubble;
var
  i,k:Integer;
  speicher:String;
begin
  // da ein dynamisches Array Null-basierend ist,
  // fangen wir bei 0 an und zählen insgesammt bis zum vorletzten
  for i:=0 to high(arr)-1 do
    for k:=i+1 to high(arr) do
      if arr[i]>arr[k] then
      begin
        speicher:=arr[k];
        arr[k]:=arr[i];
        arr[i]:=speicher;
      end;
end;

 

gehen wir nun mal ein Array durch:
          0     1        2       3
arr['xyz','hallo','abc','fgh']

1. Lauf:
for i:=0 bis 2
  for k:=1 bis 3
    if 'xyz'>'hallo' stimmt da x in der ASCII-Tabelle einen größeren Index hat, als das h
       vertausche arr[0] mit arr[1]
    if beendet
  for geht weiter, da k<3
  for k:=2
    if 'hallo'>'abc' stimmt...
       vertausche arr[0] mit arr[2]
    if beendet
  for geht weiter, da k<3
  for k:=3
    if 'abc'>'fgh' stimmt nicht...
    if beendet
  for beendet
  // momentan sieht das array so aus: arr['abc','hallo','xyz','fgh']
for geht weiter da i<2
for i:=1
  for k:=2 bis 3
    if 'hallo'>'xyz' stimmt nicht...
    if beendet
  for geht weiter da k<3
  for k:=3
    if 'hallo'>'fgh' stimmt...
      vertausche arr[1] mit arr[3]
    if beendet
  for beendet
  // momentan sieht das array so aus: arr['abc','fgh','xyz','hallo']
for geht weiter da i<2
for i:=2
  for k:=3 bis 3
    if 'xyz'>'hallo' stimmt...
      vertausche arr[2] mit arr[3]
    if beendet
  for beendet
for beendet

und nun:
arr['abc','fgh','hallo','xyz'];
Sortierung abgeschlossen ;-)

Hinweis:

Außer Bubblesort gibt es noch viele andere Algorithmen, welche je nach verwendeter "Datenstruktur" und dem Dateninhalt wesentlich schneller sein können. Als Datenstruktur wurde hier ein Array genommen. Bei Quicksort oder Mergesort empfiehlt sich jedoch eine "doppelt verkettete Liste".

Da das Kommentarmodul dieser Seite zur Zeit neu überarbeitet werden muss, sendet bitte alle Fragen, Anregungen oder Probleme mit Betreff zu welchem Thema es sich handelt an folgende Mailadresse:


Hinweis:

Dieses Kommentar-Modul teilt seinen Inhalt mit dem gleichnamigen Kapitel im Delphi-Anfängerkurs. Daher kann es vorkommen, dass Fragen zu Lazarus im Anfängerkurs im Delphi-Anfängerkurs und umgekehrt stehen. Wenn ihr euch registriert, werdet ihr aber immer an die richtige Stelle weitergeleitet.
Zu dieser gemeinsamen Nutzung der Datenbank habe ich mich entschlossen, weil die Sprachelemente in Lazarus genauso wie in Delphi genutzt werden können.

www.marco-hetzel.de
www.delphi-lernen.de
www.lazarus-lernen.de

© 2006-2019 by Marco Hetzel , last modified 01.11.2018, 11:28

(* Unterstützung dient der Aufrechthaltung laufender Kosten für dieses Projekt.)