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: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99:
| procedure quicksort(aUn2SortDaten0: TPop; bSortierrichtung0:boolean); var iLinks0,iRechts0,i,j:integer; begin iLinks0:=low(aUn2SortDaten0); iRechts0:=high(aUn2SortDaten0); setlength(aSortVergleich,length(aUn2SortDaten0)); for i:=iLinks0 to iRechts0 do begin aSortVergleich[i]:=aUn2SortDaten0[i].BadDist; end;
quicksort_teil_a(aUn2SortDaten0, iLinks0, iRechts0); if not bSortierrichtung0 then begin repeat begin quicksort_teil_c(aUn2SortDaten0, iLinks0, iRechts0); iLinks0:=iLinks0+1; iRechts0:=iRechts0-1; end; until not (iLinks0 < iRechts0); end; end;
procedure quicksort_teil_a(var aUn2SortDaten1: TPop; iLinksP1,iRechtsP1:integer); var iTeiler:integer; begin if iLinksP1 < iRechtsP1 then begin iTeiler := quicksort_teil_b(aUn2SortDaten1, iLinksP1, iRechtsP1); quicksort_teil_a(aUn2SortDaten1, iLinksP1, iTeiler-1); quicksort_teil_a(aUn2SortDaten1, iTeiler+1, iRechtsP1); end; end;
function quicksort_teil_b(var aUn2SortDaten2: TPop; iLinksP2,iRechtsP2:integer):integer; var iLinksTemp,iRechtsTemp:integer; begin iLinksTemp := iLinksP2; iRechtsTemp := iRechtsP2 - 1; repeat begin while ((aSortVergleich[iLinksTemp] <= aSortVergleich[iRechtsP2]) and (iLinksTemp < iRechtsP2)) do iLinksTemp:= iLinksTemp + 1; Pivotelement ist while ((aSortVergleich[iRechtsTemp] >= aSortVergleich[iRechtsP2]) and (iRechtsTemp > iLinksP2)) do iRechtsTemp:= iRechtsTemp - 1; if iLinksTemp < iRechtsTemp then quicksort_teil_c(aUn2SortDaten2, iLinksTemp, iRechtsTemp); end; until not(iLinksTemp < iRechtsTemp); vorbeigelaufen ist quicksort_teil_c(aUn2SortDaten2, iLinksTemp, iRechtsP2); result:=iLinksTemp; end;
procedure quicksort_teil_c(var aUn2SortDaten3: TPop; iDatensatzzeiger1, iDatensatzzeiger2: integer); var vHelp:Variant; iTempDatensatzanzahl:integer; begin vHelp:=aSortVergleich[iDatensatzzeiger1]; aSortVergleich[iDatensatzzeiger1]:=aSortVergleich[iDatensatzzeiger2];; aSortVergleich[iDatensatzzeiger2]:=vHelp; iTempDatensatzanzahl:=length(aUn2SortDaten3); setlength(aUn2SortDaten3,iTempDatensatzanzahl+1); aUn2SortDaten3[iTempDatensatzanzahl]:=aUn2SortDaten3[iDatensatzzeiger1]; aUn2SortDaten3[iDatensatzzeiger1]:=aUn2SortDaten3[iDatensatzzeiger2]; aUn2SortDaten3[iDatensatzzeiger2]:=aUn2SortDaten3[iTempDatensatzanzahl]; setlength(aUn2SortDaten3,iTempDatensatzanzahl); end;
|