Сортировка вставками
Сортировка вставками — простой алгоритм сортировки. Хотя этот метод сортировки намного менее эффективен, чем более сложные алгоритмы (такие как быстрая сортировка), у него есть ряд преимуществ:
- прост в реализации;
- эффективен на небольших наборах данных, на наборах данных до десятков элементов может оказаться лучшим;
- эффективен на наборах данных, которые уже частично отсортированы;
- это устойчивый алгоритм сортировки (не меняет порядок элементов, которые уже отсортированы);
- может сортировать список по мере его получения;
- не требует временной памяти, даже под стек.
Алгоритм
На каждом шаге алгоритма мы выбираем один из элементов входных данных и вставляем его на нужную позицию в уже отсортированном списке, до тех пор пока набор входных данных не будет исчерпан. Метод выбора очередного элемента из исходного массива произволен; может использоваться практически любой алгоритм выбора. Обычно (и с целью получения устойчивого алгоритма сортировки), элементы вставляются по порядку их появления во входном массиве. Приведенный ниже алгоритм использует именно эту стратегию выбора.
Реализация сортировки вставками на С++
07 | template < class item= "Item" > |
08 | void exch(Item &A, Item &B) |
10 | Item t = A; A = B; B = t; |
12 | template < class item= "Item" > |
13 | void compexch (Item &A, Item &B) |
15 | if (B < A) exch(A, B) ; |
17 | template < class item= "Item" > |
18 | void insertion_sort(Item a[], int L, int R) |
21 | for (i = R; i > L; i--) compexch(a[i-1], a[i]); |
22 | for (i = L + 2; i cur) |