Главная
Дисциплины (2009-2010)
Дисциплины (2010-2011)
Разное
Популярные

Рекурсивные алгоритмы: быстрая сортировка:

{  реурсивные алгоритмы: быстрая сортировка, см. программу внизу           }
{  ----------------------------------------------------------------------- }
{                           БЫСТРАЯ СОРТИРОВКА.                            }
{       Устанавливаем I=1 и J=N. Сравниваем элементы  A[I]  и  A[J].  Если }
{  A[I]<=A[J], то уменьшаем J на 1 и проводим  следующее сравнение элемен- }
{  тов A[I] с A[J]. Последовательное уменьшение индекса J и сравнение ука- }
{  занных элементов  A[I] с A[J] продолжаем  до тех пор,  пока выполняется }
{  условие A[I] <= A[J]. Как только A[I] станет больше A[J], меняем места- }
{  ми элементы A[I] с A[J], увеличиваем индекс I на 1 и продолжаем сравне- }
{  ние  элементов  A[I] с A[J]. Последовательное увеличение  индекса  I  и }
{  сравнение (элементов A[I] с A[J]) продолжаем до тех  пор, пока выполня- }
{  ется условие A[I] <= A[J].  Как  только A[I] станет больше A[J],  опять }
{  меняем местами элементы A[I] с A[J], снова начинаем уменьшать J.        }
{       Чередуя уменьшение J и увеличение I, сравнение и необходимые обме- }
{  ны, приходим к некоторому элементу, называемому  пороговым или главным, }
{  характеризующим условие  I=J. В результате элементы массива оказываются }
{  разделенными на две части так, что все элементы слева - меньше главного }
{  элемента, а все элементы справа - больше главного элемента.             }
{       К этим  массивам применяем рассмотренный алгоритм, получаем четыре }
{  части и т.д. Процесс закончим, когда массив A станет полностью отсорти- }
{  рованным.                                                               }
{       При программировании алгоритма "Быстрой сортировки" удобно исполь- }
{  зовать рекурентные вызовы процедуры сортировки (рекурсию).              }
{  ----------------------------------------------------------------------- }

var a : array[1..10] of integer;
    n : integer;

procedure QuickSort(L, R: Integer);
var i, j, x, y: integer;
begin
  i := l;
  j := r;
  x := a[(l + r) div 2];
  repeat
    while (A[i] < x) do inc(i);
    while (x < A[j]) do dec(j);
    if (i <= j) then
    begin
      y := A[i];
      a[i] := a[j];
      a[j] := y;
      inc(i);
      dec(j);
    end;
  until (i > j);
  if (l < j) then QuickSort(l, j);
  if (i < r) then QuickSort(i, r);
end;

begin
     writeln('Введите 10 элементов массива:');
     for n := 1 to 10 do readln(a[n]);
     QuickSort(1, 10);
     writeln('После сортировки:');
     for n := 1 to 10 do writeln(a[n]);
end.


Последнее обновление:
Copyright (C) 2009-2010 by RA0LHS
Hosted by uCoz