Можем ли мы оптимизировать рандомизированную быструю сортировку с помощью хвостовой рекурсии?

Я знаю, что мы можем оптимизировать быструю сортировку, используя хвостовую рекурсию, удалив более одного вызова рекурсии и сократив его до однократного одного вызова рекурсии: -

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

void quickSort(int arr[], int low, int high)
{
start:
    if (low < high)
    {
        int pi = partition(arr, low, high);

        quickSort(arr, low, pi - 1);
 
        low = pi+1;
        high = high;
        goto start;
    }
}

Но можем ли мы оптимизировать рандомизированную быструю сортировку с помощью хвостовой рекурсии?

1 ответ

Рекурсия хвостового стека направлена ​​на оптимизацию рекурсивных вызовов. Единственное различие между рандомизированной быстрой сортировкой и обычной быстрой сортировкой - это функция разделения, которая выбирает случайный поворот в случае рандомизированной быстрой сортировки. Обратите внимание, что эта функция распределения нерекурсивна. Поскольку рекурсивная часть как рандомизированной быстрой сортировки, так и обычной быстрой сортировки одинакова, одинаковая оптимизация может выполняться в обоих случаях. Так да.

Другие вопросы по тегам