Sobes.tech
Junior — Middle

Je možné implementovat třídicí algoritmus, který nepoužívá dodatečnou paměť pro uchovávání mezilehlých dat?

sobes.tech AI

Odpověď od AI

Ano, existují třídicí algoritmy, které nepoužívají dodatečnou paměť pro ukládání mezilehlých dat — nazývají se in-place algoritmy.

Příklady takových algoritmů:

  • Bublinkové třídění (Bubble Sort)
  • Vkládací třídění (Insertion Sort)
  • Výběrové třídění (Selection Sort)
  • Rychlé třídění (Quick Sort) — při pečlivé implementaci
  • Hranové třídění (Heap Sort)

Tyto algoritmy mění pořadí prvků přímo v původním poli, aniž by alokovaly dodatečnou paměť pro kopie nebo pomocné struktury.

Příklad in-place rychlého třídění v Javě:

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;
}

Tímto způsobem in-place třídění umožňuje šetřit paměť, ale někdy může být pomalejší nebo méně stabilní než třídění s použitím dodatečné paměti.