Гномья сортировка

"...Во время перестановки гном смотрит на текущий и предыдущий садовые горшки: если они в правильном порядке, он шагает на один горшок вперёд, иначе он меняет их местами и шагает на один горшок назад. Граничные условия: если нет предыдущего горшка, он шагает вперёд; если нет следующего горшка, он закончил."

Конечно, приступать к делу обязательно с первого горшка.

На Delphi:

type
  TAI = array of integer;
...
procedure GnomeSort(var A: TAI);
var
    i: integer;
begin
  i := Low(A);
  while i <= High(A) do
  begin
    if (i = Low(A)) or (A[i] >= A[i-1]) then
    begin
      inc(i);
    end
      else
    begin
      swap(A[i], A[i-1]);
      dec(i);
    end;
  end;
end;

 

Сложность:

Максимальная O(N2)
Минимальная O(N)
Средняя O(N2)