summaryrefslogtreecommitdiff
path: root/t/qsort.pas
blob: 9f62f94e0d3079111849e77c9564974ef7a38cf8 (plain)
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
program qsort;

extern srand(seed:integer):void;
extern rand():integer;
extern time(t:integer):integer;
extern printf(fmt:string; ...):integer;

function qsort(arr:^integer; start:integer; ends:integer):void;
var
    i,j,mid,t:integer;
begin
    if ends>start then begin
        mid := arr[ends];
        i := start;
        for j := start to ends-1 do
            if arr[j]<mid then begin
                t := arr[i];
                arr[i] := arr[j];
                arr[j] := t;
                i := i+1;
            end;
        t := arr[i];
        arr[i] := arr[ends];
        arr[ends] := t; 
        qsort(arr, start, i-1);
        qsort(arr, i+1 ,ends)
    end
end;

function main():integer;
var
    arr:array[0..99999] of integer;
    i:integer;
begin
    srand(time(0));
    for i:=0 to 99999 do
        arr[i] := rand() mod 1000;
    qsort(@arr, 0, 99999);
    for i:=99999 downto 0 do
        printf('%d ', arr[i]);
    main := 0
end;