Guest User

Generic Sort

a guest
Apr 4th, 2015
51
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 1.22 KB | None | 0 0
  1. procedure ByteSwap(a, b: ^UInt8; size_ptr: UInt32);
  2. var
  3.   I: Integer;
  4.   T: UInt8;
  5.   AP, BP: ^Integer;
  6. begin
  7.   for I := 0 To size_ptr - 1 do
  8.   begin
  9.     T := a^;
  10.     a^ := b^;
  11.     b^ := T;
  12.     inc(a, sizeof(a^));
  13.     inc(b, sizeof(b^));
  14.   end;
  15. end;
  16.  
  17. procedure Sort(list: ^UInt8; length: UInt32; size_ptr: UInt32; Comparator: function(a, b: Pointer): Boolean);
  18. var
  19.   I, J, Size: Integer;
  20. begin
  21.   size := length * size_ptr;
  22.   for I := 0 to size - 1 do
  23.   begin
  24.     for J := 0 to size - i - size_ptr - 1 do
  25.     begin
  26.       if (comparator(list[j + size_ptr], list[j])) then
  27.       begin
  28.         ByteSwap(list[j + size_ptr], list[j], size_ptr);
  29.       end;
  30.       Inc(J, size_ptr - 1);
  31.     end;
  32.     Inc(I, size_ptr - 1);
  33.   end;
  34. end;
  35.  
  36. function compareInt(a, b: Pointer): boolean;
  37. begin
  38.   Result := Integer(a^) < Integer(b^);
  39. end;
  40.  
  41. function compareChar(a, b: Pointer): boolean;
  42. begin
  43.   Result := Char(a^) < Char(b^);
  44. end;
  45.  
  46. var
  47.   TIA: TIntegerArray;
  48.   TCA: Array of Char;
  49. begin
  50.   TIA := [5, 6, 7, 4, 3, 8, 9, 2, 1, 10];
  51.   Sort(@TIA[0], Length(TIA), sizeof(Integer), @compareInt);
  52.   writeln(TIA);
  53.  
  54.   TCA := ['B', 'C', 'A', 'D'];
  55.   Sort(@TCA[0], Length(TCA), sizeof(Char), @compareChar);
  56.   writeln(TCA);
  57. end.
Advertisement
Add Comment
Please, Sign In to add comment