Sobes.tech
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.