fork download
  1. program SelectionSortDemo;
  2.  
  3. uses
  4. SysUtils;
  5.  
  6. const
  7. n = 100000;
  8.  
  9. var
  10. i, j: LongInt;
  11. A: array [1..n] of LongInt;
  12. Count: array [0..999999] of LongInt;
  13. tnach, tkonech: QWord;
  14.  
  15. begin
  16. randomize;
  17. for i := 1 to n do
  18. A[i] := -500000 + Random(1000000);
  19.  
  20. tnach := GetTickCount64;
  21.  
  22. { === СОРТИРОВКА ПОДСЧЁТОМ === }
  23. { 1. Обнуление счётчиков }
  24. for i := 0 to 999999 do
  25. Count[i] := 0;
  26.  
  27. { 2. Подсчёт }
  28. for i := 1 to n do
  29. Inc(Count[A[i] + 500000]);
  30.  
  31. { 3. Запись обратно в A }
  32. i := 1;
  33. for j := 0 to 999999 do
  34. while Count[j] > 0 do
  35. begin
  36. A[i] := j - 500000;
  37. Inc(i);
  38. Dec(Count[j]);
  39. end;
  40.  
  41. tkonech := GetTickCount64;
  42.  
  43. writeln('Время сортировки (Counting Sort): ', (tkonech - tnach) / 1000:0:3, ' сек');
  44. writeln('Первые 5: ', A[1], ' ', A[2], ' ', A[3], ' ', A[4], ' ', A[5]);
  45. writeln('Последние 5: ', A[n-4], ' ', A[n-3], ' ', A[n-2], ' ', A[n-1], ' ', A[n]);
  46. end.
Success #stdin #stdout 0.01s 5288KB
stdin
7 21
1 2 547152
1 3 509157
1 4 539282
1 5 541645         
1 6 458433
1 7 385173

2 3 131528
2 4 92735
2 5 150511
2 6 94440
2 7 194542
3 4 216600
3 5 272401
3 6 157176
3 7 124077
4 5 57785
4 6 97323
4 7 242232
5 6 136663
5 7 283862
6 7 147426
stdout
Время сортировки (Counting Sort): 0.004 сек
Первые 5: -499984 -499969 -499961 -499955 -499938
Последние 5: 499965 499971 499972 499974 499981