Mam kod QuickSorta i wpisuje do niego liczby posortowane odwrotnie. Problem w tym, że program wywala dla ilosci liczb około 50 000, a ma działać nawet dla 100 000. Co zmienić, żeby działał poprawnie?
#include<iostream>
using namespace std;
int partition(int tablica[], int p, int r)
{
int x = tablica[p];
int i = p, j = r, w;
while (true)
{
while (tablica[j] > x)
j--;
while (tablica[i] < x)
i++;
if (i < j)
{
w = tablica[i];
tablica[i] = tablica[j];
tablica[j] = w;
i++;
j--;
}
else
return j;
}
}
int quicksort(int tablica[], int p, int r)
{
int q;
if (p < r)
{
q = partition(tablica,p,r);
quicksort(tablica, p, q);
quicksort(tablica, q+1, r);
}
}
int main()
{
int ilosc_liczb, i;
cout << "Podaj ilosc licz do posortowania: ";
cin >> ilosc_liczb;
int *tablica = new int [ilosc_liczb];
for (int i=0; i< ilosc_liczb; ++i)
tablica[i]=0;
for (int i=0; i<ilosc_liczb;++i)
{
tablica[0] = ilosc_liczb;
tablica[i+1] = tablica[i] - 1;
}
quicksort(tablica,0,ilosc_liczb-1);
for (i = 0; i < ilosc_liczb; i++)
cout << "tablica[" << i << "] = " << tablica[i] << endl;
delete [] tablica;
return 0;
}