Медленная сортировка

Разделим массив пополам, рекурсивно отсортируем каждую половину. Сравним крайние правые(наибольшие) элементы в каждой половине, при необходимости, обменяем. Теперь максимальный элемент гарантировано самый правый. Рекурсивно отсортируем оставшийся диапазон без правого элемента...

procedure SlowSort(var A: TAI);

   procedure Slow(Left, Right: integer);
   var
       mid : integer;
   begin
     if Left >= Right then Exit;
     mid := (Left + Right) div 2;
     Slow(Left, mid);
     Slow(mid + 1, Right);
     if A[mid] > A[Right] then swap(A[mid], A[Right]); 
     Slow(Left, Right - 1);
   end;
begin
  Slow(Low(A), High(A));
end;

Очевидно, это один из непрактичных вариантов сортировки.