Advertisement
Guest User

Untitled

a guest
Jan 20th, 2018
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 3.86 KB | None | 0 0
  1. Program QuikSort;
  2. { Программа сортировки массива по возрастанию (неубыванию) элементов - }
  3. { быстрая сортировка                                                   }
  4.         const N=10; {размерность массива}
  5.         type Element = integer; {"заглушка" определения типа элемента массива}
  6.                                 {при работе со структурированными данными    }
  7.                                 {(записями) тип переопределяется             }
  8.              Arr = array [1..N] of Element; {тип для определения массива,    }
  9.                                             {элементы которогоупорядочиваются}
  10.         var A: Arr; {массив, элементы которого упорядочиваются }
  11.           {Вспомогательные переменные, используемые при сортировке: }
  12.             i: integer;
  13.  
  14.         function Key(b: Element): integer;
  15.         {Заглучшка функции вычисления ключа элемента массива}
  16.         begin
  17.              Key := b {возвращает для массива чисел само значение числа}
  18.         end;
  19.  
  20.         procedure Sort (L,R: Integer);
  21.         { Рекурсивная процедура сортировки                                    }
  22.         { L - индекс левого элемента - первого в сортируемой части массива    }
  23.         { R - индекс правого элемента - последнего в сортируемой части массива}
  24.              var i, j: Integer;
  25.              Bar: Integer; {ключ барьерного элемента}
  26.              W: Element; {вспомогательный элемент для обмена значений}
  27.         begin
  28.              i := L; j := R;
  29.              Bar := Key(A[(L+R) div 2]); {вычисляем ключ барьерного элемента}
  30.            {Перемещаем найденные элементы с ключами, большими барьерного из }
  31.            {левой части, и меньшими барьерного из правой, меняя их местами: }
  32.              repeat
  33.                {Пропускаем элементы, удовлетворяющие условию сортировки: слева}
  34.                {от барьерного остаются меньшие элементы, справа - большие:    }
  35.                    while Key(A[i]) < Bar do inc(i);
  36.                    while Key(A[j]) > Bar do dec(j);
  37.                  {Если нашли элементы, не удовлетворяющие условиям сортировки,}
  38.                  {меняем их местами:                                          }
  39.                    if i <= j then
  40.                    begin
  41.                         W := A[i]; A[i] := A[j]; A[j] := W;
  42.                         inc(i); dec(j)
  43.                    end
  44.              until i >= j;
  45.           { Повторям сортировку для "половинок" массива: }
  46.              if L < j then Sort(L, j);
  47.              if i < R then Sort(i, R)
  48.         end;
  49. begin
  50.      writeln('Введите элементы массива:');
  51.      for i:=1 to N do
  52.          readln(A[i]);
  53.          
  54.    { Запускаем процедуру сортировки для всего массива - }
  55.    { с первого до последнего элемента:                  }
  56.      Sort(1, N);
  57.      
  58.      writeln('Отсортированный массив:');
  59.      for i:=1 to N do
  60.          writeln(A[i]);
  61. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement