QUICKSOR.PAS 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. Uses DOS;
  2. Const n = 15000;
  3. Var
  4. mas : array [1..n] of ^word;
  5. i : integer;
  6. inp,out : text;
  7. hour,minute,second,sec100 : word;
  8. hour1,minute1,second1,sec1001 : longint;
  9. hour2,minute2,second2,sec1002 : longint;
  10. procedure QuickSort(left,right:word);
  11. var
  12. i,j:integer;
  13. x,y:word;
  14. begin
  15. i:=left;
  16. j:=right;
  17. x:=mas[left]^;
  18. repeat
  19. while (mas[i]^< x) and (i<right) do inc(i);
  20. while (x <mas[j]^) and (j>left) do dec(j);
  21. if (i<=j) then
  22. begin
  23. y:=mas[i]^;
  24. mas[i]^:=mas[j]^;
  25. mas[j]^:=y;
  26. inc(i);
  27. dec(j);
  28. end;
  29. until i>j;
  30. if left<j then QuickSort(left,j);
  31. if i<right then QuickSort(i,right);
  32. end;
  33. Begin
  34. randomize;
  35. assign(inp,'main');
  36. assign(out,'res');
  37. Rewrite(inp);
  38. Rewrite(out);
  39. for i := 1 to n do
  40. begin
  41. mas[i]^ := random(maxint);
  42. Write(inp,mas[i]^,' ');
  43. if i mod 10 = 0 then WriteLn(inp);
  44. end;
  45. close(inp);
  46. GetTime(hour,Minute,Second,sec100);
  47. hour1 := hour;
  48. minute1 := minute;
  49. second1 := second;
  50. sec1001 := sec100;
  51. QuickSort(1,n);
  52. GetTime(hour,minute,second,sec100);
  53. hour2 := hour;
  54. minute2 := minute;
  55. second2 := second;
  56. sec1002 := sec100;
  57. hour1 := hour2 - hour1;
  58. minute1 := minute2-minute1;
  59. if minute1 < 0 then
  60. begin
  61. dec(hour1);
  62. minute1 := 60 + minute1;
  63. end;
  64. second1 := second2-second1;
  65. if second1 < 0 then
  66. begin
  67. dec(minute1);
  68. second1 := 60 + second1;
  69. end;
  70. sec1001 := sec1002 - sec1001;
  71. if sec1001 < 0 then
  72. begin
  73. dec(second1);
  74. sec1001 := 100 + sec1001;
  75. end;
  76. WriteLn;
  77. Write(Hour1,' часов ',Minute1,' минут ',second1,' секунд ',sec1001,' 100-х');
  78. ReadLn;
  79. for i := 1 to n do
  80. begin
  81. Write(out,mas[i]^,' ');
  82. if i mod 10 = 0 then WriteLn(out);
  83. end;
  84. close(out);
  85. End.