Den moderne arbejdsplads er i stigende grad afhængig af mødelokaler til at fremme samarbejde, men dette skift medfører også stigende sikkerhedsudfordringer.
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.