Witam, mam pewien problem z quicksortem, który dla wylosowanej tablicy działa super przy każdym jej rozmiarze. Problem pojawia się gdy chcę zadziałać quicksortem na posortowaną tablicę i obliczyć liczbę przestawień. Dla rozmiaru tablicy około 3000 działa jednak dla większych rozmiarów pojawia się stack overflow. Byłbym wdzięczny za pomoc, bo nie mam pomysłu z czego to wynika. Problem pojawia się zarówno dla wersji Lomuto jak i Hoare.
int Lomuto_Quicksort(int* Tab, int low, int top, int &numberOfComparisons, int &numberOfInversions)
{
if (low >= top) return 0;
int pivot = Tab[top];
int b = low;
for (int a = low; a < top; a++)
{
numberOfComparisons++;
if (Tab[a] <= pivot)
{
swap(Tab[a], Tab[b]);
numberOfInversions++;
b++;
}
}
swap(Tab[b], Tab[top]);
numberOfInversions++;
Lomuto_Quicksort(Tab, low, b - 1, numberOfComparisons, numberOfInversions);
Lomuto_Quicksort(Tab, b + 1, top, numberOfComparisons, numberOfInversions);
}
int Hoare_Quicksort(int* Tab, int low, int top, int& numberOfComparisons, int& numberOfInversions)
{
if (low >= top) return 0;
int piwot = Tab[low];
int i = low;
int j = top;
while (i <= j)
{
while (Tab[i] < piwot)
{
numberOfComparisons++;
i++;
}
while (Tab[j] > piwot)
{
numberOfComparisons++;
j--;
}
if (i <= j)
{
numberOfInversions++;
swap(Tab[i], Tab[j]);
i++;
j--;
}
}
Hoare_Quicksort(Tab, low, j, numberOfComparisons, numberOfInversions);
Hoare_Quicksort(Tab, i, top, numberOfComparisons, numberOfInversions);
}