Advertisement
THOMAS_SHELBY_18

Sort

Feb 5th, 2024
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 7.70 KB | Source Code | 0 0
  1. program Sort;
  2. {$APPTYPE CONSOLE}
  3.  
  4. Type
  5.     TArr = Array Of Integer;
  6.  
  7. Var
  8.     N: Integer;
  9.     NumArr: TArr;
  10.  
  11. Procedure OutputArray(Arr: TArr);
  12. Var
  13.     I: Integer;
  14. Begin
  15.     for I := Low(Arr) to High(Arr) do
  16.          Write(Arr[I]:4);
  17.     Writeln;
  18. End;
  19.  
  20. Function CreateArr(N: Integer): TArr;
  21. Var
  22.     I: Integer;
  23.     Arr: TArr;
  24. Begin
  25.     SetLength(Arr, N);
  26.     for I := Low(Arr) to High(Arr) do
  27.          Arr[I] := Random(100);
  28.     CreateArr := Arr;
  29. End;
  30.  
  31. Procedure SimpleBubbleSort;
  32. Var
  33.     A: TArr;
  34.     I, J, Temp: Integer;
  35.     ComparisonsCount, AssignmensCount, CalculationsCount: Integer;
  36. Begin
  37.     A := Copy(NumArr);
  38.  
  39.     ComparisonsCount := 0; // сравнения
  40.     AssignmensCount := 0; // присваивания
  41.     CalculationsCount := 0; // вычисления
  42.  
  43.     For J := Low(A) to High(A)-1 do
  44.     Begin
  45.  
  46.         Inc(AssignmensCount);
  47.         Inc(CalculationsCount);
  48.         Inc(ComparisonsCount);
  49.  
  50.         For I := Low(A)+1 to High(A)-J do
  51.         Begin
  52.             Inc(AssignmensCount);
  53.             Inc(CalculationsCount);
  54.  
  55.             if A[I-1] > A[I] then
  56.             Begin
  57.                 Temp := A[I];
  58.                 A[I] := A[I-1];
  59.                 A[I-1] := Temp;
  60.  
  61.                 Inc(AssignmensCount, 3);
  62.             End;
  63.  
  64.             Inc(ComparisonsCount);
  65.         End;
  66.     End;
  67.  
  68.  
  69.     Writeln('SimpleBubbleSort:');
  70.     //OutputArray(A);
  71.     Writeln('Количество операций сравнения: ', ComparisonsCount);
  72.     Writeln('Количество операций присваивания: ', AssignmensCount);
  73.     Writeln('Количество вычислительных операций: ', CalculationsCount);
  74.     Writeln('ИТОГО: ', CalculationsCount+AssignmensCount+ComparisonsCount);
  75.  
  76. End;
  77.  
  78. Procedure SimpleBubbleSortWithFlag;
  79. Var
  80.     A: TArr;
  81.     I, J, Temp: Integer;
  82.     IsSorted: Boolean;
  83.     ComparisonsCount, AssignmensCount, CalculationsCount: Integer;
  84. Begin
  85.     A := Copy(NumArr);
  86.  
  87.     ComparisonsCount := 0; // сравнения
  88.     AssignmensCount := 0; // присваивания
  89.     CalculationsCount := 0; // вычисления
  90.  
  91.     For J := Low(A) to High(A)-1 do
  92.     Begin
  93.  
  94.         IsSorted := True;
  95.         Inc(AssignmensCount);
  96.  
  97.         Inc(AssignmensCount);
  98.         Inc(CalculationsCount);
  99.         Inc(ComparisonsCount);
  100.  
  101.         For I := Low(A)+1 to High(A)-J do
  102.         Begin
  103.             Inc(AssignmensCount);
  104.             Inc(CalculationsCount);
  105.  
  106.             if A[I-1] > A[I] then
  107.             Begin
  108.                 Temp := A[I];
  109.                 A[I] := A[I-1];
  110.                 A[I-1] := Temp;
  111.                 IsSorted := False;
  112.  
  113.                 Inc(AssignmensCount, 4);
  114.             End;
  115.  
  116.             Inc(ComparisonsCount);
  117.         End;
  118.  
  119.         Inc(ComparisonsCount);
  120.         if IsSorted then break;
  121.  
  122.     End;
  123.  
  124.  
  125.     Writeln('SimpleBubbleSortWithFlag:');
  126.     //OutputArray(A);
  127.     Writeln('Количество операций сравнения: ', ComparisonsCount);
  128.     Writeln('Количество операций присваивания: ', AssignmensCount);
  129.     Writeln('Количество вычислительных операций: ', CalculationsCount);
  130.     Writeln('ИТОГО: ', CalculationsCount+AssignmensCount+ComparisonsCount);
  131.  
  132. End;
  133.  
  134. Procedure SimpleShakerSort;
  135. Var
  136.     A: TArr;
  137.     I, J, Temp, Left, Right: Integer;
  138.     ComparisonsCount, AssignmensCount, CalculationsCount: Integer;
  139. Begin
  140.     A := Copy(NumArr);
  141.  
  142.     ComparisonsCount := 0; // сравнения
  143.     AssignmensCount := 0; // присваивания
  144.     CalculationsCount := 0; // вычисления
  145.  
  146.     Left := Low(A)+1;
  147.     Right := High(A);
  148.  
  149.     Inc(AssignmensCount,2);
  150.  
  151.     while Left < Right do
  152.     Begin
  153.         Inc(ComparisonsCount);
  154.  
  155.         for I := Left to Right do
  156.         Begin
  157.             Inc(AssignmensCount);
  158.             Inc(CalculationsCount);
  159.             Inc(ComparisonsCount);
  160.  
  161.             if A[I-1] > A[I] then
  162.             Begin
  163.                 Temp := A[I];
  164.                 A[I] := A[I-1];
  165.                 A[I-1] := Temp;
  166.  
  167.                 Inc(AssignmensCount, 3);
  168.             End;
  169.  
  170.             Inc(ComparisonsCount);
  171.  
  172.         End;
  173.  
  174.         Dec(Right);
  175.         Inc(CalculationsCount);
  176.         Inc(AssignmensCount);
  177.  
  178.         for I := Right Downto Left do
  179.         Begin
  180.             Inc(AssignmensCount);
  181.             Inc(CalculationsCount);
  182.             Inc(ComparisonsCount);
  183.  
  184.             if A[I-1] > A[I] then
  185.             Begin
  186.                 Temp := A[I];
  187.                 A[I] := A[I-1];
  188.                 A[I-1] := Temp;
  189.  
  190.                 Inc(AssignmensCount, 3);
  191.             End;
  192.  
  193.             Inc(ComparisonsCount);
  194.         End;
  195.         Inc(Left);
  196.         Inc(CalculationsCount);
  197.         Inc(AssignmensCount);
  198.     End;
  199.  
  200.     Writeln('SimpleShakerSort:');
  201.     //OutputArray(A);
  202.     Writeln('Количество операций сравнения: ', ComparisonsCount);
  203.     Writeln('Количество операций присваивания: ', AssignmensCount);
  204.     Writeln('Количество вычислительных операций: ', CalculationsCount);
  205.     Writeln('ИТОГО: ', CalculationsCount+AssignmensCount+ComparisonsCount);
  206.  
  207. End;
  208.  
  209. Procedure ShakerSortWithFlag;
  210. Var
  211.     A: TArr;
  212.     I, J, Temp, Left, Right: Integer;
  213.     ComparisonsCount, AssignmensCount, CalculationsCount: Integer;
  214.     IsSorted: Boolean;
  215. Begin
  216.     A := Copy(NumArr);
  217.  
  218.     ComparisonsCount := 0; // сравнения
  219.     AssignmensCount := 0; // присваивания
  220.     CalculationsCount := 0; // вычисления
  221.  
  222.     Left := Low(A)+1;
  223.     Right := High(A);
  224.  
  225.  
  226.     Inc(AssignmensCount,2);
  227.  
  228.     while (Left < Right) And Not IsSorted do
  229.     Begin
  230.         Inc(ComparisonsCount, 2);
  231.  
  232.         IsSorted := True;
  233.         Inc(AssignmensCount);
  234.  
  235.         for I := Left to Right do
  236.         Begin
  237.             Inc(AssignmensCount);
  238.             Inc(CalculationsCount);
  239.             Inc(ComparisonsCount);
  240.  
  241.             if A[I-1] > A[I] then
  242.             Begin
  243.                 Temp := A[I];
  244.                 A[I] := A[I-1];
  245.                 A[I-1] := Temp;
  246.                 IsSorted := False;
  247.                 Inc(AssignmensCount, 4);
  248.             End;
  249.  
  250.             Inc(ComparisonsCount);
  251.  
  252.         End;
  253.  
  254.         Dec(Right);
  255.         Inc(CalculationsCount);
  256.         Inc(AssignmensCount);
  257.  
  258.         for I := Right Downto Left do
  259.         Begin
  260.             Inc(AssignmensCount);
  261.             Inc(CalculationsCount);
  262.             Inc(ComparisonsCount);
  263.  
  264.             if A[I-1] > A[I] then
  265.             Begin
  266.                 Temp := A[I];
  267.                 A[I] := A[I-1];
  268.                 A[I-1] := Temp;
  269.                 IsSorted := False;
  270.                 Inc(AssignmensCount, 4);
  271.             End;
  272.  
  273.             Inc(ComparisonsCount);
  274.         End;
  275.         Inc(Left);
  276.         Inc(CalculationsCount);
  277.         Inc(AssignmensCount);
  278.     End;
  279.  
  280.  
  281.     Writeln('ShakerSortWithFlag:');
  282.     //OutputArray(A);
  283.     Writeln('Количество операций сравнения: ', ComparisonsCount);
  284.     Writeln('Количество операций присваивания: ', AssignmensCount);
  285.     Writeln('Количество вычислительных операций: ', CalculationsCount);
  286.     Writeln('ИТОГО: ', CalculationsCount+AssignmensCount+ComparisonsCount);
  287.  
  288. End;
  289. begin
  290.     Randomize;
  291.     Writeln('Введите N');
  292.     Readln(N);
  293.     //Writeln('Исходный массив:');
  294.     NumArr := CreateArr(N);
  295.     //OutputArray(NumArr);
  296.  
  297.     //Writeln;
  298.     SimpleBubbleSort;
  299.     Writeln;
  300.     SimpleBubbleSortWithFlag;
  301.     Writeln;
  302.     SimpleShakerSort;
  303.     Writeln;
  304.     ShakerSortWithFlag;
  305.  
  306.     Readln;
  307. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement