View difference between Paste ID: ta6R5QXt and t2K3q6UK
SHOW: | | - or go back to the newest paste.
1
procedure ByteSwap(a, b: ^UInt8; size_ptr: UInt32);
2
var
3
  I: Integer;
4
  T: UInt8;
5-
  AP, BP: ^Integer;
5+
6
  for I := 0 To size_ptr - 1 do
7
  begin
8
    T := a^;
9
    a^ := b^;
10
    b^ := T;
11
    inc(a, sizeof(a^));
12
    inc(b, sizeof(b^));
13
  end;
14
end;
15
16
procedure Sort(list: ^UInt8; length: UInt32; size_ptr: UInt32; Comparator: function(a, b: Pointer): Boolean);
17
var
18
  I, J, Size: Integer;
19
begin
20
  size := length * size_ptr;
21
  for I := 0 to size - 1 do
22
  begin
23
    for J := 0 to size - i - size_ptr - 1 do
24
    begin
25
      if (comparator(list[j + size_ptr], list[j])) then
26
      begin
27
        ByteSwap(list[j + size_ptr], list[j], size_ptr);
28
      end;
29
      Inc(J, size_ptr - 1);
30
    end;
31
    Inc(I, size_ptr - 1);
32
  end;
33
end;
34
35
function compareInt(a, b: Pointer): boolean;
36
begin
37
  Result := Integer(a^) < Integer(b^);
38
end;
39
40
function compareChar(a, b: Pointer): boolean;
41
begin
42
  Result := Char(a^) < Char(b^);
43
end;
44
45
var
46
  TIA: TIntegerArray;
47
  TCA: Array of Char;
48
begin
49
  TIA := [5, 6, 7, 4, 3, 8, 9, 2, 1, 10];
50
  Sort(@TIA[0], Length(TIA), sizeof(Integer), @compareInt);
51
  writeln(TIA);
52
53
  TCA := ['B', 'C', 'A', 'D'];
54
  Sort(@TCA[0], Length(TCA), sizeof(Char), @compareChar);
55
  writeln(TCA);
56
end.