ArinaRaguzina

Untitled

Jan 29th, 2019
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.55 KB | None | 0 0
  1. program project1;
  2. var i,n:dword;
  3. digits:array [0..255] of dword;
  4. numb:array of dword;
  5. timed:array of dword;
  6.  
  7. procedure MSD(left,right,offset:dword);
  8. var i,index,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. index := 0;
  21. for i := left to right do
  22. begin
  23. index := (numb[i] shr ((3-offset) * 8)) and 255;
  24. digits[index] += 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. index := ((numb[i] shr ((3-offset) * 8)) and 255);
  39. p := digits[index];
  40. timed[p] := numb[i];
  41. digits[index] := p+1;
  42. end;
  43.  
  44. for i := left to right do
  45. numb[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(numb,n);
  58. setlength(timed,n);
  59. for i:=0 to n do
  60. numb[i] := random(10);
  61. MSD(0,n-1,0);
  62. writeln;
  63. for i := 0 to n-1 do
  64. writeln(numb[i]);
  65. readln;
  66. readln;
  67.  
  68. end.
Advertisement
Add Comment
Please, Sign In to add comment