|
Hauptseite - Welches System? - Hardware - Software - Emulatoren - |
Internet MausNet Programmieren Verweise Über |
Die folgenden Beispiele zeigen das Sortieren von Feldern mittels Quicksort, wobei für kurze Teilfelder Sortieren mit direktem Einfügen benutzt wird.
Sprache | C | Pascal | Modula |
---|---|---|---|
Beispiel | bestsort.c | bestsort.pas | bestsort.mod |
/* 'Bestsort' ?? Sortieren mit Quicksort fuer lange Teillisten */ /* und eingelagertem Sortieren mit direktem Einfuegen fuer kurze */ /* Teillisten. Da der Datentyp erst bei einer konkreten Anwen- */ /* dung feststeht, ist der Sortieralgorithmus nur als Beispiel */ /* und nicht als Modul programmiert. */ #define MAX_SORT_ELT 8000 #define TOGGLE 20 typedef long SortKeyType; typedef SortKeyType SortKeyArray[MAX_SORT_ELT]; static void DirektesEinfuegen(SortKeyArray Feld, int l, int r) { int i, j; SortKeyType Help; for (i=l+1; i<=r; i++) { Help = Feld[i]; j = i-1; while ((j>0) && (Feld[j]>Help)) { Feld[j+1] = Feld[j]; j = j - 1; } Feld[j+1] = Help; } } static void Sort(SortKeyArray Feld, int l, int r) { int i, j; SortKeyType Help, Pivot; Pivot = Feld[(l + r) / 2]; i = l; j = r; do { while (Feld[i] < Pivot) i = i + 1; while (Pivot < Feld[j]) j = j - 1; if (i <= j) { Help = Feld[i]; Feld[i] = Feld[j]; Feld[j] = Help; i = i + 1; j = j - 1; } } while (i <= j); i> (l TOGGLE) Sort(Feld, l, j); else DirektesEinfuegen(Feld, l, j); if (i < r) if (r-i > TOGGLE) Sort(Feld, i, r); else DirektesEinfuegen(Feld, i, r); } void SortBestsort(SortKeyArray Feld, int Anz) { Sort(Feld,0,Anz-1); }
(* 'Bestsort' ?? Sortieren mit Quicksort fuer lange Teillisten *) (* und eingelagertem Sortieren mit direktem Einfuegen fuer kurze *) (* Teillisten. Da der Datentyp erst bei einer konkreten Anwen- *) (* dung feststeht, ist der Sortieralgorithmus nur als Beispiel *) (* und nicht als Modul programmiert. *) const MaxSortElt = 8000; type SortKeyType = long_integer; SortKeyArray = array[1..MaxSortElt] of SortKeyType; procedure SortBestsort(var Feld : SortKeyArray; Anz : integer); const Toggle=20; procedure DirektesEinfuegen(var Feld : SortKeyArray; l, r : integer); var i, j : integer; Help : SortKeyType; begin for i:=l+1 to r do begin Help := Feld[i]; j := i - 1; while (j>0) and (Feld[j]>Help) do begin Feld[j+1] := Feld[j]; j := j - 1; end; Feld[j+1] := Help; end; end; procedure Sort(var Feld : SortKeyArray; l, r : integer); var i, j : integer; Help, Pivot : SortKeyType; begin Pivot := Feld[(l + r) div 2]; i := l; j := r; repeat while Feld[i] < Pivot do i := i + 1; while Pivot < Feld[j] do j := j - 1; if i<=j then begin Help := Feld[i]; Feld[i] := Feld[j]; Feld[j] := Help; > ij; if lToggle then Sort(Feld, l, j) else DirektesEinfuegen(Feld, l, j); if i Toggle then Sort(Feld, i, r) else DirektesEinfuegen(Feld, i, r); end; begin Sort(Feld, 0, Anz); end;
(* 'Bestsort' ?? Sortieren mit Quicksort fuer lange Teillisten *) (* und eingelagertem Sortieren mit direktem Einfuegen fuer kurze *) (* Teillisten. Da der Datentyp erst bei einer konkreten Anwen- *) (* dung feststeht, ist der Sortieralgorithmus nur als Beispiel *) (* und nicht als Modul programmiert. *) CONST MaxSortElt = 8000; TYPE SortKeyType = LONGINT; SortKeyArray = ARRAY[1..MaxSortElt] OF SortKeyType; PROCEDURE SortBestsort(VAR Feld : SortKeyArray; Anz : CARDINAL); CONST Toggle=20; PROCEDURE DirektesEinfuegen(VAR Feld : SortKeyArray; l, r : CARDINAL); VAR i, j : CARDINAL; Help : SortKeyType; BEGIN FOR i:=l+1 TO r DO Help := Feld[i]; j := i - 1; WHILE (j>0) AND (Feld[j]>Help) DO Feld[j+1] := Feld[j]; j := j - 1; END; Feld[j+1] := Help; END; END DirektesEinfuegen; PROCEDURE Sort(VAR Feld : SortKeyArray; l, r : CARDINAL); VAR i, j : CARDINAL; Help, Pivot : SortKeyType; BEGIN Pivot := Feld[(l + r) DIV 2]; i := l; j := r; REPEAT WHILE Feld[i] < Pivot DO i := i + 1; END; WHILE Pivot < Feld[j] DO j := j - 1; END; IF i<=j THEN Help := Feld[i]; Feld[i] := Feld[j]; Feld[j] := He>p; j; IF lToggle THEN Sort(Feld, l, j) ELSE DirektesEinfuegen(Feld, l, j); END; END; IF i Toggle THEN Sort(Feld, i, r) ELSE DirektesEinfuegen(Feld, i, r); END; END; END Sort; BEGIN Sort(Feld, 0, Anz); END SortBestsort;
![]() |
English version not yet available. |