Advertisement
Guest User

Untitled

a guest
Jan 18th, 2019
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.20 KB | None | 0 0
  1. procedure MSD(left,right,offset:dword);
  2. var i,number,t,p:dword;
  3. pocket:array [0..255] of dword;
  4. begin
  5. if (offset > 3) then exit;
  6. if (right - left > 1) then
  7. begin
  8. for i := 0 to 255 do
  9. begin
  10. digits[i] := 0;
  11. pocket[i] := 0;
  12. end;
  13.  
  14. number := 0;
  15. for i := left to right do
  16. begin
  17. number := (numbers[i] shr ((3-offset) * 8)) and $FF;
  18. digits[number] += 1;
  19. end;
  20.  
  21. t := left;
  22. for i := 0 to 255 do
  23. begin
  24. p := digits[i] + t;
  25. digits[i] := t;
  26. pocket[i] := digits[i];
  27. t := p;
  28. end;
  29.  
  30. for i := left to right do
  31. begin
  32. number := ((numbers[i] shr ((3-offset) * 8)) and $FF);
  33. p := digits[number];
  34. timed[p] := numbers[i];
  35. digits[number] := p+1;
  36. end;
  37.  
  38. for i := left to right do
  39. numbers[i] := timed[i];
  40.  
  41. for i := 0 to 254 do
  42. begin
  43. if ((pocket[i] < pocket[i+1]) and (pocket[i] >= left)) then
  44. MSD(pocket[i],(pocket[i+1] - 1),offset+1);
  45. end;
  46. end;
  47. end;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement