Witam mam problem ze swoim programem. Program ma wykonywać sortowanie wielu tablic dla dużych rozmiarów (max 1 milion). Dla rozmiarów mniejszych niż 100 tys. działa normalnie, natomiast dla rozmiaru rzędu 1 milion jest błąd Unhandled exception at 0x00C17329 in pa.exe: 0xC00000FD: Stack overflow (parameters: 0x00000000, 0x00B02000). Proszę o pomoc.
#include <iostream>
#include <cstdlib>
#include <time.h>
#include <vector>
using namespace std;
template<typename Typ, int Rozmiar>
class tablica
{
public:
Typ tab[Rozmiar]; //tablica główna
Typ pom[Rozmiar]; //tablica pomocnicza
void merge( int lewy, int srodek, int prawy)
{
for (int i = lewy; i <= prawy; i++)
pom[i] = tab[i];
int i = lewy, j = srodek + 1, k = lewy;
while (i <= srodek && j <= prawy)
{
if (pom[i] < pom[j])
tab[k++] = pom[i++];
else
tab[k++] = pom[j++];
}
while (i <= srodek)
tab[k++] = pom[i++];
}
void mergeSort(int pocz, int kon)
{
int srodek;
if (pocz < kon)
{
srodek = (pocz + kon) / 2;
mergeSort(pocz, srodek);
mergeSort(srodek + 1, kon);
merge(pocz, srodek, kon);
}
}
tablica()
{
for (int i = 0; i < Rozmiar; i++)
tab[i] = rand() % 100000;
}
};
int main()
{
const int Rozmiar = 1000000;
vector <tablica <int, Rozmiar >> lista;
for (int i = 0; i < 100; i++)
{
tablica <int, Rozmiar> a;
lista.push_back(a);
}
double start = clock();
for (int i = 0; i < lista.size(); i++)
{
lista[i].mergeSort(0, Rozmiar - 1);
}
double czas = (clock() - start) / 1000;
cout << "\n" << "Czas sortowania: " << czas << endl;
}
tablica
tu nie występuje na stacku o ile dobrze widzę.