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. |