Sobes.tech
Junior — Middle

Възможно ли е да се реализира алгоритъм за сортиране, който не използва допълнителна памет за съхранение на междинни данни?

sobes.tech AI

Отговор от AI

Да, съществуват алгоритми за сортиране, които не използват допълнителна памет за съхранение на междинни данни — те се наричат in-place алгоритми.

Примери за такива алгоритми:

  • Bubble Sort (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 сортирането позволява спестяване на памет, но понякога може да бъде по-бавно или по-малко стабилно от тези, които използват допълнителна памет.