Junior — Middle
Czy możliwe jest zaimplementowanie algorytmu sortowania, który nie używa dodatkowej pamięci do przechowywania danych tymczasowych?
sobes.tech AI
Odpowiedź od AI
Tak, istnieją algorytmy sortowania, które nie używają dodatkowej pamięci do przechowywania danych pośrednich — nazywane są algorytmami in-place.
Przykłady takich algorytmów:
- Sortowanie bąbelkowe (Bubble Sort)
- Sortowanie przez wstawianie (Insertion Sort)
- Sortowanie przez wybór (Selection Sort)
- Sortowanie szybkie (Quick Sort) — przy starannej implementacji
- Sortowanie przez kopiec (Heap Sort)
Te algorytmy zmieniają kolejność elementów bezpośrednio w oryginalnej tablicy, nie przydzielając dodatkowej pamięci na kopie lub struktury pomocnicze.
Przykład sortowania szybkiego in-place w Javie:
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;
}
W ten sposób sortowania in-place pozwalają zaoszczędzić pamięć, choć czasami mogą być wolniejsze lub mniej stabilne niż te, które korzystają z dodatkowej pamięci.