Det var også hvad jeg tænkte men jeg var lidt doven og gad ikke at overføre mine tal til et array men dette burde værre det samme
procedure Tform1.QuickSort(iLo, iHi: Integer); var Lo, Hi: Integer; mid:real; T:string; begin Lo := iLo; Hi := iHi; Mid :=strtofloat(ListBox1.items[(lo+hi) div 2]); repeat while strtofloat(ListBox1.items[lo])< Mid do Inc(Lo); while strtofloat(ListBox1.items[hi])> Mid do Dec(Hi); if Lo <= Hi then begin T := ListBox1.items[lo]; ListBox1.items[lo]:=ListBox1.items[Hi]; ListBox1.items[Hi]:= T; Inc(Lo); Dec(Hi); end; until Lo > Hi; if Hi > iLo then QuickSort(iLo, Hi); if Lo < iHi then QuickSort(Lo, iHi); end;
type TForm1 = class(TForm) Button1: TButton; ListBox1: TListBox; ListBox2: TListBox; procedure Button1Click(Sender: TObject); procedure Quicksort; procedure init; private { Private declarations } public { Public declarations } end;
var Form1: TForm1; talarray: array[1..10000] of real; //array som senere skal sorteres
implementation
{$R *.dfm}
Procedure TForm1.Init; var i: Integer; begin for i := 1 to 10000 do talarray[i ] := random(99999999)/100; for i:=1 to 30 do Listbox1.Items.Add(FloatToStr(talarray[i])); end;
procedure TForm1.Quicksort;
procedure Qsort_rek(venstre, hoejre: integer); //underprocedure var midti, tempint: Real; h, j: integer; begin h := venstre; j := hoejre; midti := talarray[(venstre+hoejre) div 2]; repeat while talarray[h] < midti do inc(h); while talarray[j] > midti do dec(j); if h <= j then begin tempint := talarray[h]; // talarray[h] := talarray[j]; // trekantsbyt talarray[j] := tempint; // inc(h); dec(j); end; until h > j; if venstre < j then Qsort_rek(venstre, j); if hoejre > h then Qsort_rek(h, hoejre); end;
begin Qsort_rek(1, 9999); end;
procedure TForm1.Button1Click(Sender: TObject); var i: Integer; begin init; quicksort; for i:=1 to 30 do Listbox2.Items.Add(FloatToStr(talarray[i])); end;
Takker for pointene :-) Proceduren er rekursiv, det vil sige at den hele tiden lægger nye værdier på stacken. Prøv evt at gå ind under Projects/Options/Memorysize og fordobbel MaxStackSize
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.