Autor Beitrag
SteffenF
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Mo 21.08.06 07:36 
hi und nen guten morgen @all,

ich bins mal wieder. Ich habe volgende QuickSort funktion selbergebastelt bitte net lachen.

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
...
type
  navi_rec = record
                ebene1  : string;
                ebene2  : string;
                ebene3  : string;
                me1     : integer; //kennzahl navigationsebene1
                me2     : integer; //kennzahl navigationsebene2
                me3     : integer; //kennzahl navigationsebene3 navigation baut 
                                   //sich dann nach dem system 1.1 1.2 1.1.1 etc auf
                auto    : integer;
                self    : integer;
                autoinc: integer;
             end;
...
private
...
nav: array of navi_rec;

function QuickSort(rein:string):boolean;
var i,j,erg:integer;
links,rechts:integer;
tmp: navi_rec;
begin
  if length(form1.nav)>1 then begin
  i:=-1;
  repeat
    i:=i+1;
    j:=i;
    repeat
    j:=j+1;
    if j>length(form1.nav)-1 then begin
                                j:=length(form1.nav)-1;
                                i:=length(form1.nav)-1;
                                end;
    links:=form1.nav[i].me1*100000+form1.nav[i].me2*1000+form1.nav[i].me3*10;
    erg:=form1.nav[i].me1*100000+form1.nav[i].me2*1000+form1.nav[i].me3*10;
    form1.nav[i].auto:=erg;
    rechts:=form1.nav[j].me1*100000+form1.nav[j].me2*1000+form1.nav[j].me3*10;
    if links>rechts then begin
                         tmp:=form1.nav[i];
                         form1.nav[i]:=form1.nav[j];
                         form1.nav[j]:=tmp;
                         end;
    until j=length(form1.nav)-1;
  until i=length(form1.nav)-1;
  end;
end;


nun zu meiner Frage wie kann ich diese Funktion verbessern und flexibler machen. Schön wäre wenn ich me1, me2, me3 sortieren könnte ohne dabei diese rechen Funktion zunutzen. Ein weiteres nettes Feature wäre wenn ich mit der Funktion auch string-record einträge sortieren könnte. Und das bzw. die zu sortierenden Felder auswählen könnte. Bitte nicht meckern ich habe schon die ganze Nacht damit verbracht die Sortierfunktion zu basteln da ich leider nicht schlau aus den vorhandenen Informationen geworden bin. Die such Funktion ist heiß gelaufen und mein Gehirn kurz vorm supergau. Ich wäre euch sehr verbunden wenn ihr mir ein paar gute Lösungsansätze und etwas Code zur Verfügung stellen würdet.

Gruß Steffen