Entwickler-Ecke

Algorithmen, Optimierung und Assembler - Selection Sort


DelphiFreaks - Mi 19.01.05 10:08
Titel: Selection Sort
Hi, wir sitzen gerade im Informatikunterricht und haben ein Problem in Delphi, und zwar versuchen wir eine Sortierfunktion in eine Listenstruktur zu bringen, die Aufgabe lautet wie folgt:

:?: Gegeben sei ein Liste mit den Elementen: 1,3,7,4,5,9,8,2,10,6
Das Ergebnis nach Sortierung ist natürlich: 1,2,3,4,5,6,7,8,9,10


Wie kann man solch eine Sortierung vornehmen?

(wir hoffen ihr könnt uns weiter helfen!!)


Heiko - Mi 19.01.05 10:13

Nimm die Shellsort oder die Bubblesort. Am einfachsten ist aber das Austauschverfahren, ist dafür sehr langsam.


jasocul - Mi 19.01.05 10:17

Bei den Delphi-Demo-Programmen findet ihr unter "Threads" die drei gängigsten Sortier-Algorithmen.


Heiko - Mi 19.01.05 10:19

Hier die Quelltext aus einem Delphi-Buch bevor du ewig suchst:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
procedure sort_austausch (var a: array of word);
var bis,i,j : longint;
    h       : word;
begin
    bis := High(a);
    For i := 0 To bis - 1 do
        For j := i + 1 To bis do If a[i] > a[j] Then begin
                h    := a[i];
                a[i] := a[j];
                a[j] := h;
        end;
end;



Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
procedure sort_auswahl (var a: array of word);
var bis,i,j,k : longint;
    h         : word;

begin
    bis := high(a);
    For i := 0 To bis - 1 do begin
        h := a[i];
        k := i;
        For j := i + 1 To bis do If a[j] < h Then begin
           h := a[j];
           k := j;
        End;
        a[k] := a[i];
        a[i] := h;
    end;
end;



Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
procedure sort_bubble (var a: array of word);
var bis,i : longint;
    h     : word;

begin
    bis := high(a);
    repeat
        For i := 0 To bis - 1 do
        If a[i] > a[i + 1Then begin
                h    := a[i];
                a[i] := a[i + 1];
                a[i + 1] := h;
        End;
        dec(bis);
    until bis = 1;
End;



Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
procedure sort_shell (var a: array of word);
var bis,i,j,k : longint;
    h         : word;

begin
    bis := high(a);
    k   := bis shr 1;  { div 2 }
    While k > 0 do begin
        For i := 0 To bis - k do begin
            j := i;
            While (j >= 0And (a[j] > a[j + k]) do begin
                h   := a[j];
                a[j]:= a[j + k];
                a[j + k] := h;
                dec(j,k);
            end;
        end;
        k := k shr 1{ div 2 }
    end;
End;


Die Shell_Sort ist dabei das schnellste Sortierverfahren. Aber zu bemerken ist, dass die Shellsort bei mir bisher immer die letzte Zahl nicht richtig sortiert hat (Fehler noch nicht gefunden).

PS: Das ich dir den Quelltext poste liegt nur daran, dass du im Informatikunterricht sitzt und wahrscheinlich keine Zeit hast, das ganze Internet zu durchsuchen.

Moderiert von user profile iconUGrohne: Code- durch Delphi-Tags ersetzt.


DelphiFreaks - Mi 19.01.05 10:31

Recht herzliches Dankeschön, wir haben die Infos übernommen und probieren mal aus


Heiko - Mi 19.01.05 10:32

@ DelphiFreaks
warum hast du dein Thema "Selection Sort" genannt?

Als Hinweis noch, die oben von mir geposteten Quelltext sind nur zum sortieren von Integerzahlen da (für Strings gibt es aber ähnliche).

Moderiert von user profile iconUdontknow: Postings zusammengefasst.