Advertisement
wojtas626

[PAS] Sortowania + mierzenie czasu

Dec 7th, 2014
174
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 5.25 KB | None | 0 0
  1. program project1;
  2.  
  3. uses
  4.     crt, DOS;
  5.  
  6. const
  7.      n = 100;
  8.  
  9. type
  10.     Tab = Array[1..n] of Integer;
  11. var
  12.    RandomTab: Tab;
  13.    i: Integer;
  14.    hours, min, sec, sec100: word;
  15.    time1, time2: Int64;
  16.  
  17. procedure Swap (var a, b: Integer);
  18. var
  19.    temp: Integer;
  20. begin
  21.      temp := a;
  22.      a := b;
  23.      b := temp;
  24. end;
  25.  
  26. procedure Wybieranie(RndTab: Tab; length: Integer);
  27. var
  28.    i , j, minimal: Integer;
  29. begin
  30.      GetTime(hours, min, sec, sec100);
  31.      time1 := sec100 + sec*100 + min*6000 + hours*360000;
  32.      for i := 1 to length do
  33.      begin
  34.           minimal := i;
  35.           for j := i+1 to length do
  36.           begin
  37.                if RndTab[j] < RndTab[minimal] then
  38.                begin
  39.                     minimal := j;
  40.                end;
  41.           end;
  42.           swap(RndTab[i], RndTab[minimal]);
  43.      end;
  44.      GetTime(hours,min,sec,sec100);
  45.      time2 := sec100 + sec*100 + min*6000 + hours*360000;
  46.      WriteLn('Czas przez wybieranie: ', time2-time1);
  47.      {for i := 1 to length do
  48.      begin
  49.           Write(RndTab[i], ' ');
  50.      end;}
  51. end;
  52.  
  53. procedure Wstawianie(RndTab: Tab; length: Integer);
  54. var
  55.    tmp: Integer;
  56.    i, j: Integer;
  57. begin
  58.      GetTime(hours,min,sec,sec100);
  59.      time1 := sec100 + sec*100 + min*6000 + hours*360000;
  60.      for j := 2 to length do
  61.      begin
  62.          tmp := RndTab[j];
  63.          i := j - 1;
  64.          while (i >= 0) and (tmp < RndTab[i]) do
  65.          begin
  66.               RndTab[i + 1] := RndTab[i];
  67.               i := i - 1;
  68.          end;
  69.          RndTab[i + 1] := tmp;
  70.      end;
  71.      GetTime(hours,min,sec,sec100);
  72.      time2 := sec100 + sec*100 + min*6000 + hours*360000;
  73.      WriteLn('Czas przez wstawianie: ', time2-time1);
  74.  
  75.      {for i := 1 to n do
  76.      begin
  77.           Write(RndTab[i], ' ');
  78.      end; }
  79. end;
  80.  
  81. procedure Babelkowe(RndTab: Tab; length: Integer);
  82. var
  83.    i, j: Integer;
  84. begin
  85.      GetTime(hours,min,sec,sec100);
  86.      time1 := sec100 + sec*100 + min*6000 + hours*360000;
  87.      for j := 1 to length - 1 do
  88.      begin
  89.           for i := 1 to length - j do
  90.           begin
  91.                if RndTab[i] > RndTab[i + 1] then
  92.                begin
  93.                     swap(RndTab[i], RndTab[i + 1]);
  94.                end;
  95.           end;
  96.      end;
  97.      GetTime(hours,min,sec,sec100);
  98.      time2 := sec100 + sec*100 + min*6000 + hours*360000;
  99.      WriteLn('Czas babelkowo: ', time2-time1);
  100.     { for i := 1 to n do
  101.      begin
  102.           Write(RndTab[i], ' ');
  103.      end;   }
  104. end;
  105.  
  106.  
  107.  
  108. procedure HeapSort(var RndTab : Tab; lenght: Integer);
  109. var
  110.    i, j, k, l, tmp : Integer;
  111. begin
  112.      GetTime(hours,min,sec,sec100);
  113.      time1 := sec100 + sec*100 + min*6000 + hours*360000;
  114.      for i := 2 to lenght do
  115.      begin
  116.           j := i;
  117.           k := i div 2;
  118.           tmp := RndTab[i];
  119.           while ( ( k > 0 ) and ( RndTab[k] < tmp ) ) do
  120.           begin
  121.                RndTab[j] := RndTab[k];
  122.                j := k;
  123.                k := j div 2;
  124.           end;
  125.           RndTab[j] := tmp;
  126.      end;
  127.  
  128.      for i := lenght downto 2 do
  129.      begin
  130.           swap( RndTab[1], RndTab[i] );
  131.           j := 1;
  132.           k := 2;
  133.           while ( k < i ) do
  134.           begin
  135.                if ( ( k+1 < i ) and ( RndTab[k+1] > RndTab[k] ) ) then
  136.                begin
  137.                     l := k + 1;
  138.                end else
  139.                begin
  140.                     l := k;
  141.                end;
  142.  
  143.                if ( RndTab[l] <= RndTab[j] ) then break;
  144.  
  145.                swap( RndTab[j], RndTab[l] );
  146.                j := l;
  147.                k := 2*j;
  148.           end;
  149.      end;
  150.      GetTime(hours,min,sec,sec100);
  151.      time2 := sec100 + sec*100 + min*6000 + hours*360000;
  152.      WriteLn('Czas przez kopcowanie: ', time2-time1);
  153.    { for i := 1 to n do
  154.      begin
  155.           Write(RndTab[i], ' ');
  156.      end;}
  157. end;
  158.  
  159.  
  160. procedure Quicksort(var RndTab: Tab; left: Integer; right: Integer);
  161. var
  162.    pivot, i, j, bufor: Integer;
  163. begin
  164.      pivot := RndTab[(left + right) div 2];
  165.      i := left ;
  166.      j := right;
  167.      repeat
  168.            while (RndTab[i] < pivot) do i := i + 1;
  169.        while (RndTab[j] > pivot) do j := j - 1;
  170.  
  171.            if i <= j then
  172.            begin
  173.                 if i < j then
  174.                 begin
  175.                      swap(RndTab[i], RndTab[j]);
  176.                 end;
  177.                 i := i + 1;
  178.                 j := j - 1;
  179.            end;
  180.      until i > j;
  181.      if j > left then Quicksort(RndTab, left, j);
  182.      if i < right then Quicksort(RndTab, i, right);
  183. end;
  184.  
  185.  
  186. begin
  187.      Randomize;
  188.      for i := 1 to n do
  189.      begin
  190.           RandomTab[i] := Random(1000);
  191.      end;
  192.  
  193.      WriteLn;
  194.      WriteLn;
  195.  
  196.      Wybieranie(RandomTab, n);
  197.  
  198.      WriteLn;
  199.      WriteLn;
  200.  
  201.      Wstawianie(RandomTab, n);
  202.  
  203.      WriteLn;
  204.      WriteLn;
  205.  
  206.      Babelkowe(RandomTab, n);
  207.  
  208.      WriteLn;
  209.      WriteLn();
  210.  
  211.      HeapSort(RandomTab, n);
  212.  
  213.      WriteLn;
  214.      WriteLn;
  215.  
  216.      GetTime(hours,min,sec,sec100);
  217.      time1 := sec100 + sec*100 + min*6000 + hours*360000;
  218.  
  219.      Quicksort(RandomTab, 1, n);
  220.  
  221.      GetTime(hours,min,sec,sec100);
  222.      time2 := sec100 + sec*100 + min*6000 + hours*360000;
  223.      WriteLn('Czas quicksort: ', time2-time1);
  224.  
  225.      {for i := 1 to n do
  226.      begin
  227.           Write(RandomTab[i], ' ');
  228.      end; }
  229.      ReadKey;
  230.  
  231. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement