MeZon Team
ГлавнаяО насДокументацияКаталог статейСсылкиОбратная связь

Сортировка вставками

Сортировка вставками — простой алгоритм сортировки. У этого метода ряд преимуществ:

  • прост в реализации;
  • эффективен на небольших наборах данных, на наборах данных до десятков элементов может оказаться лучшим;
  • эффективен на наборах данных, которые уже частично отсортированы;
  • это устойчивый алгоритм сортировки (не меняет порядок элементов, которые уже отсортированы);
  • может сортировать список по мере его получения;
  • не требует временной памяти, даже под стек.

На каждом шаге алгоритма мы выбираем один из элементов входных данных и вставляем его на нужную позицию в уже отсортированном списке, до тех пор пока набор входных данных не будет исчерпан. Метод выбора очередного элемента из исходного массива произволен; может использоваться практически любой алгоритм выбора. Обычно (и с целью получения устойчивого алгоритма сортировки), элементы вставляются по порядку их появления во входном массиве. Приведенный ниже алгоритм использует именно эту стратегию выбора.

VBA

Sub Sort(Mus() As Long)
    Dim l As Long, r As Long, i As Long, j As Long, buf As Long
    l = LBound(Mus)
    r = UBound(Mus)
 
    For i = (l + 1) To r
        buf = Mus(i)
        j = i - 1
        Do While (Mus(j) > buf)
            Mus(j + 1) = Mus(j)
            If j = l Then Exit Do
            j = j - 1
        Loop
        Mus(j) = buf
    Next
End Sub

Паскаль

const N=255;
type array_type=array [1..N] of integer; 
 
procedure InsertSort(var x:array_type);
var
  i, j, buf:integer;
begin
  for i:=2 to N do
  begin
    buf:=x[i];
    j:=i-1;
    while (j>=1) and (x[j]>buf) do
    begin
      x[j+1]:=x[j];
      j:=j-1;
    end;
    x[j+1]:=buf;
  end;
end;

PHP

function insertion_sort(&$a) {
  // для каждого $a[$i] начиная со второго элемента...
  for ($i = 1; $i < count($a); $i++) {
    $x = $a[$i];
    for ($j = $i - 1; $j >= 0 && $a[$j] > $x; $j--) {
      /* сдвигаем элементы вправо, пока выполяется условие
         $a[$j] > $a[$i] */
      $a[$j + 1] = $a[$j];
    }
    // на оставшееся после сдига место, ставим $a[$i]
    $a[$j + 1] = $x;
  }
}

 

Главная | Новости | О нас | Проекты | Документация | Каталог статей | Ссылки | Обратная связь
Каталог TUT.BY © 2002-2017 MeZon Team, Minsk, Republic of Belarus.
Meta Zone Web Engine v4.9
2017.08.19 06:44:12