Алгоритмы сортировки вставками отличаются от приведенных выше алгоритмов тем, что ищутся не «элементы для мест», а «места для элементов». Из семейства этих алгоритмов рассмотрим алгоритм прямых вставок. В массиве выделяем две части: отсортированную и нет. Сначала отсортированная часть содержит только первый элемент (сам по себе благоустроенный). Дальше каждый раз берем

[smszamok]

первое значение и «перетягиваем» его к отсортированной так, чтобы она не потеряла благоустроенности. Для этого передвигаем текущее значение по левую сторону до тех пор, пока оно не займет свое правильное место в отсортированной части массива, т.е. когда значение по левую сторону и по правую сторону текущего будут стоять «правильно» относительно него. Итак, элемент «вставляется» в отсортированную часть массива (откуда и название метода).

  • procedure insertSort(var A:alnt; n:word);
  • var и, k : word; begin
  • for k:=2 to n do begin и : =k; while (A[i]<A[i-l])and(i>l) do begin
  • swap(A[i], A[i-1]); dec(i); end; end; end;

Поскольку сдвиг элемента на одну позицию по левую сторону «стоит» три команды присваивания, рекомендуем запомнить эталонный элемент (тот, для которого ищется место в отсортированной части) в дополнительной сменной. Тогда сдвиг можно выполнить одним присваиваниям, а запам’ятований элемент потом одним присваиваниям поставить на уволенное место.

  • procedure insertSort (var A:alnt; n-.word);
  • var i, k : word; etalon : integer; begin
  • for k:=2 to n do begin etalon:=A[k]; i:=k;
  • while (i>l) and (A[i-1]>etalon) do begin A[i]:=A[i-l]; dec(i);
  • end;
  • А[и] :=etalon; end; end;

Сложность этого метода также имеет оценку Щп2). В нем, как и в сортировке «пузырьком», выполняется много обменов соседних элементов. В 1959 году Д.Шелл предложил усовершенствование алгоритма прямых вставок. Его идея — сравнивать элементы, которые находятся на определенном расстоянии один от другого и уменьшать это расстояние.

Рассмотрим пример. Пусть массив имеет такой вид: 44     55      12      42      94      18      06      67 Сначала отдельно сгруппируем и упорядочим с помощью прямых вставок элементы, которые находятся на расстоянии 4 (четвертное упорядочение). В этом примере восемь элементов, поэтому группы содержат по два элемента.

  • 1
  • 1
  • 55
  • 94
  • f
  • 67
  • 44      18      06      42
  • Теперь сгруппируем элементы на расстоянии 2 [двойное упорядочение). Имеем две группы по четыре элемента.
  • J          и          І           \
  • Об      18      12      42      44      55      94      67
  • t           и          t           t
  • В конце концов, выполним обычное (одинарное) упорядочение, сравнивая соседние элементы.
  • 06     12      18      42     44      55      67      94 З описанного понятно, что начальное расстояние h = и/2. После каждого прохода она уменьшается вдвое.
  • procedure ShellSort(var A:alnt; n:word); var и, j, h : word; temp   integer; begin
  • h := n div 2; while h>0 do begin ,  for и := h to n-h+1 do
  • begin
  • j:=i; temp:=А[и];
  • while (j>=h)and(temp<A[j-h]) do begin A[j]:=A[j-h]; dec(j,h); end;
  • A[j] := temp; end;
  • h := h div 2; end; end;

[/smszamok]

Итак, идея метода Шелла: изменить массив так, чтобы каждая группа элементов на расстоянии h была благоустроенной. Это разрешает за некоторого ряда расстояний сравнения h, последняя из которых равняется единице, получить упорядоченный массив. Но какую последовательность шагов следует избрать? Было изобретено много рядов расстояний h, которые хорошо зарекомендовали себя, но наилучшей среди них нет. Доказано лишь, что лучшие результаты дают расстояния, которые не являются делителями одна одной. В основном используют нисходящие геометрические прогрессии, поскольку в этой ситуации количество шагов близкое к log г.

Основной язык сайта

Share
Published by
Основной язык сайта

Recent Posts

Three Factors to Consider When Choosing a Leading Term Papers US Service

If you're looking to earn the best possible grade on your research paper, you need…

12 месяцев ago

How to Write My Essay

To write my essay, first you need to think of the major topic of your…

1 год ago

Term Paper Writing Services

Writing term paper is not a simple endeavor. It involves huge efforts, that need to…

1 год ago

Purchase Term Papers and Books Online

It's possible to purchase term papers and textbooks on the internet at a discount price,…

2 года ago

Essay Topic — Important Ideas to Write Essays

The main reason essay writing is so powerful is because it's a general subject and…

2 года ago

The Best Research Paper Available — Try These Tips

A couple of years ago I received an email from a student asking for information…

2 года ago