Сортировка вставками (Insertion sort)
Сортировка вставками - это простой алгоритм сортировки, который строит отсортированный массив (или список), вставляя каждый новый элемент в уже отсортированную последовательность.
Алгоритм
Алгоритм сортировки вставками работает следующим образом:
- Начинаем с первого элемента массива, считая его уже отсортированным.
- Берем следующий элемент и сравниваем его с элементами в отсортированной части массива.
- Вставляем этот элемент в правильное место в отсортированной части.
- Повторяем процесс для всех элементов.
Анализ сложности
- Временная сложность сортировки вставками: В худшем случае
, где - количество элементов. В лучшем случае - , если массив уже отсортирован. - Пространственная сложность сортировки вставками:
, так как сортировка происходит "на месте" без использования дополнительных структур данных.
Реализация
Приведём примеры реализации сортировки вставками:
def insertion_sort(arr):
for i in range(1, len(arr)):
key = arr[i]
j = i - 1
while j >= 0 and key < arr[j]:
arr[j + 1] = arr[j]
j -= 1
arr[j + 1] = key
return arr
#include <vector>
void insertionSort(std::vector<int>& arr) {
int n = arr.size();
for (int i = 1; i < n; i++) {
int key = arr[i];
int j = i - 1;
while (j >= 0 && arr[j] > key) {
arr[j + 1] = arr[j];
j = j - 1;
}
arr[j + 1] = key;
}
}
public void insertionSort(int arr[]) {
int n = arr.length;
for (int i = 1; i < n; ++i) {
int key = arr[i];
int j = i - 1;
while (j >= 0 && arr[j] > key) {
arr[j + 1] = arr[j];
j = j - 1;
}
arr[j + 1] = key;
}
}
Заключение
Сортировка вставками является одним из фундаментальных алгоритмов в области компьютерных наук, особенно ценным для понимания базовых принципов алгоритмической эффективности и техник сортировки. Хотя она может быть не такой быстрой, как некоторые более сложные алгоритмы сортировки, её простота и эффективность на небольших или почти отсортированных наборах данных делают её полезной во многих практических ситуациях.
Этот алгоритм особенно полезен в сценариях, где данные поступают последовательно и должны быть отсортированы сразу при получении. Его простота также делает его отличным выбором для начинающих программистов, стремящихся улучшить свои навыки в написании эффективного и понятного кода.