Advertisement
Guest User

Untitled

a guest
Jan 18th, 2019
134
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.71 KB | None | 0 0
  1. program project1;
  2. var i,n:dword;
  3. digits:array [0..255] of dword;
  4. numbers:array of dword;
  5. timed:array of dword;
  6.  
  7. procedure MSD(left,right,offset:dword);
  8. var i,number,t,p:dword;
  9. pocket:array [0..255] of dword;
  10. begin
  11. if (offset > 3) then exit;
  12. if (right - left > 1) then
  13. begin
  14. for i := 0 to 255 do
  15. begin
  16. digits[i] := 0;
  17. pocket[i] := 0;
  18. end;
  19.  
  20. number := 0;
  21. for i := left to right do
  22. begin
  23. number := (numbers[i] shr ((3-offset) * 8)) and $FF;
  24. digits[number] += 1;
  25. end;
  26.  
  27. t := left;
  28. for i := 0 to 255 do
  29. begin
  30. p := digits[i] + t;
  31. digits[i] := t;
  32. pocket[i] := digits[i];
  33. t := p;
  34. end;
  35.  
  36. for i := left to right do
  37. begin
  38. number := ((numbers[i] shr ((3-offset) * 8)) and $FF);
  39. p := digits[number];
  40. timed[p] := numbers[i];
  41. digits[number] := p+1;
  42. end;
  43.  
  44. for i := left to right do
  45. numbers[i] := timed[i];
  46.  
  47. for i := 0 to 254 do
  48. begin
  49. if ((pocket[i] < pocket[i+1]) and (pocket[i] >= left)) then
  50. MSD(pocket[i],(pocket[i+1] - 1),offset+1);
  51. end;
  52. end;
  53. end;
  54.  
  55. begin
  56. //read(n);
  57. //setLength(numbers,n);
  58. //setLength(timed,n);
  59. //for i := 0 to n-1 do
  60. // read(numbers[i]);
  61. randomize;
  62. setlength(numbers,1000000);
  63. setlength(timed,1000000);
  64. for i:=0 to 1000000 do
  65. numbers[i] := random(1000001);
  66. MSD(0,999999,0);
  67. writeln;
  68. for i := 0 to 999999 do
  69. writeln(numbers[i]);
  70.  
  71. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement