Advertisement
Guest User

Untitled

a guest
Dec 8th, 2019
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 2.84 KB | None | 0 0
  1. program Project1;
  2.  
  3. {$APPTYPE CONSOLE}
  4.  
  5. {$R *.res}
  6.  
  7. uses
  8.   System.SysUtils;
  9.  
  10. type
  11.    NArr = array of Integer;
  12.  
  13. procedure Output(Arr: NArr);
  14. var
  15.    i: Integer;
  16. begin
  17.    Writeln('Отсортированный массив : ');
  18.    for i := 0 to High(Arr) do
  19.       Write(Arr[i],' ');
  20. end;
  21.  
  22.  
  23. procedure BinaryInsertionSorting(var Arr: NArr);
  24. var
  25.    LeftEdge, RightEdge : Integer;
  26.    Mid: Integer;
  27.    i, j, ArrElement: Integer;
  28. begin
  29.    for i := 1 to High(Arr) do
  30.    begin
  31.       if Arr[i - 1] > Arr[i] then
  32.       begin
  33.          ArrElement := Arr[i];
  34.          LeftEdge := 0;
  35.          RightEdge := i - 1;
  36.          repeat
  37.             Mid := (LeftEdge + RightEdge ) div 2;
  38.             if Arr[Mid] < ArrElement then
  39.                LeftEdge := Mid + 1
  40.             else
  41.                RightEdge := Mid - 1;
  42.          until LeftEdge > RightEdge;
  43.          for j := i - 1 downto LeftEdge do
  44.             Arr[j + 1] := Arr[j];
  45.             Arr[LeftEdge] := ArrElement;
  46.       end;
  47.    end;
  48.    Output(Arr);
  49. end;
  50.  
  51.  
  52. procedure BoobleSort(var Arr: NArr);
  53. var
  54.    i, Temp: Integer;
  55.    Sort: Boolean;
  56. begin
  57.    Sort := True;
  58.    while Sort do
  59.    begin
  60.       Sort := False;
  61.       for i := 0 to High(Arr) - 1 do
  62.       if Arr[i] > Arr[i + 1] then
  63.          begin
  64.             Sort := True;
  65.             Temp := Arr[i];
  66.             Arr[i] := Arr[i + 1];
  67.             Arr[i + 1] := Temp;
  68.          end;
  69.    end;
  70.    Output(Arr);
  71. end;
  72.  
  73.  
  74. procedure ShakerSort(var Arr: NArr);
  75. var
  76.    i, j: Integer;
  77.    Mid, Temp: Integer;
  78.    Min, Max : Integer;
  79. begin
  80.    Mid := High(Arr) div 2;
  81.    for i := 1 to Mid do
  82.    begin
  83.       if Arr[i] > Arr[i+1] then
  84.       begin
  85.          Min := i + 1;
  86.          Max := i;
  87.       end
  88.       else
  89.       begin
  90.          Min := i;
  91.          Max := i + 1;
  92.       end;
  93.       for j := i + 2 to (High(Arr) - i + 1) do
  94.       if Arr[j] > Arr[Max] then
  95.          Max := j
  96.       else
  97.          if Arr[j] < Arr[Min] then
  98.          begin
  99.             Min := j;
  100.             Temp := Arr[i];
  101.             Arr[i] := Arr[Min];
  102.             Arr[Min]:= Temp;
  103.          end;
  104.          if Max = i then
  105.          begin
  106.             Max := min;
  107.             Temp := Arr[High(Arr) - i + 1];
  108.             Arr[High(Arr) - i + 1] := Arr[Max];
  109.             Arr[max]:= Temp;
  110.          end;
  111.    end;
  112.    Output(Arr);
  113. end;
  114.  
  115. var
  116.    Arr: NArr;
  117.    Size, Option: Integer;
  118.    i: Integer;
  119. begin
  120.    Write('Введите размер массива : ');
  121.    Readln(Size);
  122.    SetLength(Arr, Size);
  123.    Writeln('Введите элементы массива :');
  124.    for i := 0 to High(Arr) do
  125.       Read(Arr[i]);
  126.    Writeln('Выберете сортировку : ');
  127.    Readln(Option);
  128.    case Option of
  129.       1 : BinaryInsertionSorting(Arr);
  130.       2 : BoobleSort(Arr);
  131.       3 : ShakerSort(Arr);
  132.       else
  133.          BinaryInsertionSorting(Arr);
  134.    end;
  135. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement