Назад к вопросам
Junior — Middle
68
Возможно ли реализовать алгоритм сортировки, который не использует дополнительную память для сохранения промежуточных данных?
Компании, где спрашивали
Stroki
Ответ от нейросети
sobes.tech AI
Да, существуют алгоритмы сортировки, которые не используют дополнительную память для хранения промежуточных данных — их называют in-place алгоритмами.
Примеры таких алгоритмов:
- Сортировка пузырьком (Bubble Sort)
- Сортировка вставками (Insertion Sort)
- Сортировка выбором (Selection Sort)
- Быстрая сортировка (Quick Sort) — при аккуратной реализации
- Сортировка кучей (Heap Sort)
Эти алгоритмы меняют порядок элементов непосредственно в исходном массиве, не выделяя дополнительной памяти под копии или вспомогательные структуры.
Пример быстрой сортировки in-place на Java:
public void quickSort(int[] arr, int low, int high) {
if (low < high) {
int pi = partition(arr, low, high);
quickSort(arr, low, pi - 1);
quickSort(arr, pi + 1, high);
}
}
private int partition(int[] arr, int low, int high) {
int pivot = arr[high];
int i = low - 1;
for (int j = low; j < high; j++) {
if (arr[j] <= pivot) {
i++;
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
int temp = arr[i + 1];
arr[i + 1] = arr[high];
arr[high] = temp;
return i + 1;
}
Таким образом, in-place сортировки позволяют экономить память, но иногда могут уступать по скорости или стабильности сортировкам, которые используют дополнительную память.