Advertisement
green1ant

quicksort

Dec 10th, 2018
202
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 2.03 KB | None | 0 0
  1. program quick;
  2.  
  3. {$APPTYPE CONSOLE}
  4.  
  5. {$R *.res}
  6.  
  7. uses
  8.   System.SysUtils;
  9.  
  10. type
  11.    mas = array [1 .. 100] of integer;
  12.  
  13. Var
  14.    n, i: integer;
  15.    mass: mas;
  16.  
  17. procedure quicks(first, last: integer; var m: mas);
  18. var
  19.    i, j, Temp, Mid, n: integer;
  20. begin
  21.    i := first;
  22.    j := last;
  23.    Mid := m[(first + last) div 2];
  24.    { выбираем серединный эл-нт массива и делим массив пополам }
  25.    repeat
  26.       while m[i] < Mid do//меняем знак чтобы изменить сортировку
  27.          i := i + 1; { считываем всю левую часть до этого элемента }
  28.       while m[j] > Mid do//меняем знак чтобы изменить сортировку
  29.          j := j - 1; { считываем всю правую часть до этого элемента }
  30.       if i <= j then
  31.       begin
  32.          Temp := m[i]; { Сортируем элементы массива }
  33.          m[i] := m[j];
  34.          m[j] := Temp;
  35.          i := i + 1;//сдвигаем индексы, сужаем круг вокруг опорного элемента mid
  36.          j := j - 1;
  37.       end;
  38.    until i > j; {до тех пор пока индексы не пересекутся}
  39.    {рекурсивно сортируем, можем и будем сортировать сразу две части}
  40.    if first < j then {сортируем левую половину данного массива}
  41.       quicks(first, j, m);
  42.    if i < last then {сортируем правую половину данного массива}
  43.       quicks(i, last, m);
  44. end;
  45.  
  46. begin
  47.    writeln('vvedite kol-vo el-ov massiva ');
  48.    Readln(n);
  49.    for i := 1 to n do
  50.    begin
  51.       writeln('vvedite ', i, 'element ');
  52.       Readln(mass[i]);
  53.    end;
  54.    writeln(' icxodnyi massiv ');
  55.    for i := 1 to n do
  56.       write(mass[i]:4);
  57.    writeln;
  58.    writeln(' COPTUPOBAHHbIi MASSIV ');
  59.    quicks(1, n, mass);
  60.    for i := 1 to n do
  61.       write(mass[i]:3);
  62.    Readln
  63.  
  64. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement