Advertisement
popelka

Sort!!

Apr 21st, 2019
476
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 2.98 KB | None | 0 0
  1. Program trideni;
  2.  
  3. uses graph, crt;
  4.  
  5. const max = 1520;
  6. type POLE = array[1..MAX] of integer;
  7.      rozpeti = 1 .. max;
  8.  
  9. procedure swap(var A,B:integer);
  10. var help:integer;
  11. begin
  12.   Help:= A; A:=B; B:=Help;
  13. end;
  14.  
  15. procedure vytvor(out P:POLE);
  16. var i:rozpeti;
  17. begin
  18.   for i:=1 to max do
  19.    P[i]:= random(800);
  20. end;
  21.  
  22. procedure vypis(P:POLE);
  23. var i:rozpeti;
  24. begin
  25.   for i:=1 to max do
  26.    write(P[i]:4);
  27.   writeln
  28. end;
  29.  
  30. procedure nakresli(P:POLE);
  31. var i:rozpeti;
  32. begin
  33.   for I:=1 to max do
  34.     line(I,800,I,800-P[I]);
  35. end;
  36.  
  37. procedure select(var P:POLE);
  38. var i,j:rozpeti;
  39. begin
  40.   for i:=2 to max do
  41.    for j:=1 to i-1 do
  42.     begin
  43.       if P[J]>P[I] then swap(P[i],P[j]);
  44.     end;
  45. end;
  46.  
  47. procedure bubble(var P:POLE);
  48. var I,J:rozpeti;
  49. begin
  50.   for J:=1 to max-1 do
  51.    for i:=2 to max-j+1 do
  52.     if P[I]<P[I-1] then swap(P[i],P[I-1])
  53. end;
  54.  
  55. procedure insort(var P:POLE);
  56. var I,J,min:rozpeti;
  57. begin
  58.   for J:=1 to max-1 do
  59.    begin
  60.      min:=J;
  61.      for I:=J to max do
  62.       begin
  63.         if P[min]>P[i] then min:=i
  64.       end;
  65.      swap(P[J],P[min]);
  66.    end;
  67. end;
  68.  
  69. procedure gbubble(D:integer; var P:POLE);
  70. var I,J:rozpeti;
  71. begin
  72.   nakresli(P);
  73.   for J:=1 to max-1 do
  74.    begin
  75.      delay(D);
  76.     for i:=2 to max-j do
  77.       if P[I]<P[I-1] then
  78.        begin
  79.         setcolor(black);
  80.         line(I,800,I,800-P[I]);
  81.         line(I-1,800,I-1,800-P[I-1]);
  82.         setcolor(white);
  83.         swap(P[i],P[I-1]);
  84.         line(I,800,I,800-P[I]);
  85.         line(I-1,800,I-1,800-P[I-1]);
  86.        end
  87.    end;
  88. end;
  89.  
  90. procedure gselect(D:integer; var P:POLE);
  91. var i,j:rozpeti;
  92. begin
  93.   nakresli(P);
  94.   for i:=2 to max do
  95.    begin
  96.    delay(D);
  97.    for j:=1 to i-1 do
  98.     begin
  99.       if P[J]>P[I] then begin
  100.         setcolor(black);
  101.         line(I,800,I,800-P[I]); line(J,800,J,800-P[J]);
  102.         setcolor(white);
  103.         swap(P[i],P[j]);
  104.         line(I,800,I,800-P[I]); line(J,800,J,800-P[J]);
  105.        end
  106.       end;
  107.     end;
  108. end;
  109.  
  110. procedure ginsort(d:integer; var P:POLE);
  111. var I,J,min:rozpeti;
  112. begin
  113.   nakresli(P);
  114.   for J:=1 to max-1 do
  115.    begin
  116.    delay(D);
  117.      min:=J;
  118.      for I:=J to max do
  119.       begin
  120.         if P[min]>P[i] then min:=i
  121.       end;
  122.      setcolor(black);
  123.      line(J,800,J,800-P[J]); line(min,800,min,800-P[min]);
  124.      setcolor(white);
  125.      swap(P[J],P[min]);
  126.      line(J,800,J,800-P[J]); line(min,800,min,800-P[min]);
  127.    end;
  128. end;
  129.  
  130. var P:POLE;
  131.     i:rozpeti;
  132.     gd, gm: smallint;
  133.     volba:char;
  134.     d:integer;
  135. begin
  136.   gd:=detect;
  137.   initgraph(gd,gm,'');
  138.   randomize;
  139.   setfillstyle(emptyfill,0);
  140.   repeat
  141.    vytvor(P);
  142.    writeln('Vyber tridici algoritmus:');
  143.    writeln('0 ... nic');
  144.    writeln('1 ... bubble');
  145.    writeln('2 ... Insort');
  146.    writeln('3 ... selection sort');
  147.    write('Tvoje volba: ');
  148.    readln(volba);
  149.    write('Delay: '); readln(D);
  150.    bar(0,0,2000,max);
  151.    case volba of
  152.     '1':gbubble(D,P);
  153.     '2':ginsort(D,P);
  154.     '3':gselect(D,P);
  155.    end;
  156.   until volba = '0';
  157.  
  158.  
  159.  
  160.   readln
  161. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement