Mam do napisania program który testuje czas sortowania metodą quicksort. Test ma być przeprowadzony dla rozmiaru tablicy od 10k do 1M, wielkości rosną o 10k dla poszczególnego testu. W tablicy znajdują się losowo generowane liczby z zakresu od 0 do wielkości tablicy. Program który napisałem działa poprawnie dla tablic mniejszych od 140k. Przy próbie sortowania tablic większych pojawia się informacja: Zgłoszono wyjątek w lokalizacji 0x00AD12B5 w quicksortvisual.exe: 0xC0000005: Naruszenie zasad dostępu podczas odczytywania w lokalizacji 0x04BD8000. Nieobsłużony wyjątek w lokalizacji 0x00AD12B5 w quicksortvisual.exe: 0xC0000005: Naruszenie zasad dostępu podczas odczytywania w lokalizacji 0x04BD8000.
Kod wygląda następująco:
#include<iostream>
#include<fstream>
#include<ctime>
#include <algorithm>
#include<string>
#include<stdexcept>
using namespace std;
long partition_q(int* tab, long left, long right)
{
long int pivot_element = tab[left];
long int lb = left, ub = right;
int temp;
while (left < right)
{
while (tab[left] <= pivot_element)
left++;
while (tab[right] > pivot_element)
right--;
if (left < right)
{
temp = tab[left];
tab[left] = tab[right];
tab[right] = temp;
}
}
tab[lb] = tab[right];
tab[right] = pivot_element;
return right;
}
void quick_sort(int* Tab, long int p,long int r)
{
if (p < r)
{
int q = partition_q(Tab, p, r);
quick_sort(Tab, p, q - 1);
quick_sort(Tab, q + 1, r);
}
}
int main()
{
ifstream pl;
ofstream wy;
string plik, ipath="dane\\1\\", opath="wyniki\\skrajny\\1\\";
for (int ilo = 10000; ilo < 1000000; ilo += 10000)
{
plik = to_string(ilo) + ".txt";
int* tab = new int[ilo];
pl.open(ipath + plik);
if (!pl.good()) throw logic_error("blad pliku");
for (int a = 0; a < ilo; a++) pl >> tab[a];
pl.close();
clock_t start=clock();
quick_sort(tab, 0, ilo - 1);
clock_t end = clock();
double roz = ((double)end-(double)start) / (double)CLOCKS_PER_SEC;
wy.open(opath + plik);
wy << ilo << ";" << roz <<endl;
wy.close();
cout << plik<<" sorted"<<endl;
delete [] tab;
}
return 0;
}
Zmieniałem już zarezerwowany rozmiar stosu jednak to nie pomaga. Moje ustawienia w Visual Studio 2019 wyglądają następująco:
Nie mam pomysłu co może być przyczyną. Liczę, że jakieś inne oko dopatrzy się błędu.