Advertisement
feihung

sortowanie

Dec 8th, 2014
188
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 5.05 KB | None | 0 0
  1. program p24112014;
  2. uses
  3.     DOS, crt;
  4. const
  5.     n = 100;
  6. type
  7.     TabInt = array [1..n] of integer;
  8. var
  9.     i : integer;
  10.     tab : TabInt;
  11.     godz, min, sek, sek100 : word;
  12.     t1, t2 : LongInt;
  13.     ExecuteTime : array[1..5] of integer;
  14.     ExecuteTimeName : array[1..5] of string;
  15.  
  16. //*************************************************
  17. // Fill the TabInt array with random elements
  18. //*************************************************
  19. procedure RandomElements( var t : TabInt );
  20. var
  21.     i : integer;
  22. begin
  23.     randomize;
  24.     for i := 1 to n do
  25.     begin
  26.         t[i] := random(99)+1;
  27.     end;
  28. end;
  29. //*************************************************
  30. // Display the TabInt array
  31. //*************************************************
  32. procedure DisplayArray( t : TabInt );
  33. var
  34.     i : integer;
  35. begin
  36.     for i := 1 to n do
  37.     begin
  38.         write(t[i], ' ');
  39.     end;
  40.     writeln;
  41. end;
  42.  
  43. //*************************************************
  44. // Swap elements
  45. //*************************************************
  46. procedure swap( var a : integer; var b : integer );
  47. var
  48.     tmp : integer;
  49. begin
  50.     tmp := a;
  51.     a := b;
  52.     b := tmp;
  53. end;
  54.  
  55. //*************************************************
  56. // Selection Sort
  57. //*************************************************
  58. procedure SelectionSort( t : TabInt );
  59.     var i, j, k : integer;
  60. begin
  61.     GetTime(godz,min,sek,sek100);
  62.     t1 := sek100 + 100*sek + min*6000 + godz*360000;
  63.     for i := 1 to n do
  64.     begin
  65.         k := i;
  66.         for j := i+1 to n do
  67.         begin
  68.             if t[j] < t[k] then k := j;
  69.         end;
  70.         swap( t[k], t[i] );
  71.     end;
  72.     GetTime(godz,min,sek,sek100);
  73.     t2 := sek100 + 100*sek + min*6000 + godz*360000;
  74.     ExecuteTime[1] := t2 - t1;
  75. end;
  76.  
  77. //*************************************************
  78. // Insert Sort
  79. //*************************************************
  80. procedure InsertSort( t : TabInt );
  81. var
  82.     i, j, x : integer;
  83. begin
  84.     GetTime(godz,min,sek,sek100);
  85.     t1 := sek100 + 100*sek + min*6000 + godz*360000;
  86.     for j := n-1 downto 1 do
  87.     begin
  88.         x := t[j];
  89.         i := j + 1;
  90.         while ( i <= n ) and ( x > t[i] ) do
  91.         begin
  92.             t[i-1] := t[i];
  93.             inc(i);
  94.         end;
  95.         t[i-1] := x;
  96.     end;
  97.     GetTime(godz,min,sek,sek100);
  98.     t2 := sek100 + 100*sek + min*6000 + godz*360000;
  99.     ExecuteTime[2] := t2 - t1;
  100. end;
  101.  
  102. //*************************************************
  103. // Bubble Sort
  104. //*************************************************
  105. procedure BubbleSort( t : TabInt );
  106. var
  107.     i, j : integer;
  108.     p : boolean;
  109. begin
  110.     GetTime(godz,min,sek,sek100);
  111.     t1 := sek100 + 100*sek + min*6000 + godz*360000;
  112.     for i := 1 to n do
  113.     begin
  114.         p := true;
  115.         for j := 1 to n-i do
  116.         begin
  117.             if t[j] > t[j+1] then
  118.             begin
  119.                 swap( t[j], t[j+1] );
  120.                 p := false
  121.             end;
  122.         end;
  123.         if ( p = true ) then break
  124.     end;
  125.     GetTime(godz,min,sek,sek100);
  126.     t2 := sek100 + 100*sek + min*6000 + godz*360000;
  127.     ExecuteTime[3] := t2 - t1;
  128. end;
  129.  
  130. //*************************************************
  131. // Heap Sort
  132. //*************************************************
  133. procedure HeapSort( var t : TabInt );
  134. var
  135.     i, j, k, l, tmp : integer;
  136. begin
  137.     GetTime(godz,min,sek,sek100);
  138.     t1 := sek100 + 100*sek + min*6000 + godz*360000;
  139.     for i := 2 to n do
  140.     begin
  141.         j := i;
  142.         k := i div 2;
  143.         tmp := t[i];
  144.         while ( ( k > 0 ) and ( t[k] < tmp ) ) do
  145.         begin
  146.             t[j] := t[k];
  147.             j := k;
  148.             k := j div 2;
  149.         end;
  150.         t[j] := tmp;
  151.     end;
  152.     for i := n downto 2 do
  153.     begin
  154.         swap( t[1], t[i] );
  155.         j := 1;
  156.         k := 2;
  157.         while ( k < i ) do
  158.         begin
  159.             if ( ( k+1 < i ) and ( t[k+1] > t[k] ) ) then
  160.             begin
  161.                 l := k + 1;
  162.             end else
  163.             begin
  164.                 l := k;
  165.             end;
  166.             if ( t[l] <= t[j] ) then break;
  167.             swap( t[j], t[l] );
  168.             j := l;
  169.             k := 2*j;
  170.         end;
  171.     end;
  172.     GetTime(godz,min,sek,sek100);
  173.     t2 := sek100 + 100*sek + min*6000 + godz*360000;
  174.     ExecuteTime[4] := t2 - t1;
  175. end;
  176.  
  177. //*************************************************
  178. // Quick Sort
  179. //*************************************************
  180. procedure QuickSort( left : integer; right : integer; var t : TabInt );
  181. var
  182.     i, j, pivot : integer;
  183. begin
  184.  
  185.     pivot := t[ (left + right) div 2 ];
  186.     t[ (left + right) div 2 ] := t[right];
  187.     j := left;
  188.  
  189.     for i := left to right - 1 do
  190.     begin
  191.         if t[i] < pivot then
  192.         begin
  193.             swap( t[i], t[j] );
  194.             inc(j);
  195.         end;
  196.     end;
  197.     t[right] := t[j];
  198.     t[j] := pivot;
  199.  
  200.     if ( left < j-1 ) then
  201.         QuickSort( left, j-1, t );
  202.     if ( j+1 < right ) then
  203.         QuickSort( j+1, right, t);
  204.  
  205. end;
  206.  
  207.  
  208.  
  209.  
  210. //*************************************************
  211. // Main Function
  212. //*************************************************
  213. begin
  214.     RandomElements( tab );
  215.  
  216.     ExecuteTimeName[1] := 'SelectionSort';
  217.     ExecuteTimeName[2] := 'InsertSort';
  218.     ExecuteTimeName[3] := 'BubbleSort';
  219.     ExecuteTimeName[4] := 'HeapSort';
  220.     ExecuteTimeName[5] := 'QuickSort';
  221.  
  222.     SelectionSort( tab );
  223.     InsertSort( tab );
  224.     BubbleSort( tab );
  225.     HeapSort( tab );
  226.  
  227.     GetTime(godz,min,sek,sek100);
  228.     t1 := sek100 + 100*sek + min*6000 + godz*360000;
  229.  
  230.     QuickSort(1, n, tab);
  231.  
  232.     GetTime(godz,min,sek,sek100);
  233.     t2 := sek100 + 100*sek + min*6000 + godz*360000;
  234.     ExecuteTime[5] := t2 - t1;
  235.  
  236.     for i := 1 to 5 do
  237.     begin
  238.         write(ExecuteTimeName[i], ' : ', ExecuteTime[i]);
  239.         writeln;
  240.     end;
  241.     readln;
  242. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement