Przekroczenie wartości stałej

0

Witam,
Mam problem. Kiedy chcę aby moja tablica posiadała 1 000 000 elementów i definiuje to poprzez stałów program się wysypuje. Jak temu zaradzić?

Poniżej zamieszczam kod do zajęć z algorytmów sortowania.

#include <cmath>
#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <time.h>

using namespace std;


const int N = 100000; // Liczebność zbioru.

void sortowanieWstawianie(int d[N]){
clock_t start, stop;
int x,i,j;
start = clock();

  for(j = N - 2; j >= 0; j--)
  {
    x = d[j];
    i = j + 1;
    while((i < N) && (x > d[i]))
    {
      d[i - 1] = d[i];
      i++;
    }
    d[i - 1] = x;
  }

  stop = clock();
  float time=(stop - start)/CLK_TCK;

  cout << "czas wynosi: " << time << endl;

}


int main()
{

  int i,j, x;
  int d[N];

  //losjemy liczby od 1-100
  //tablica nie uporzadkowana d
  srand((unsigned)time(NULL));
  for(i = 0; i < N; i++) d[i] = rand() % 10000+1;

//  cout << "Tablica nieuporzadkowana: \n";
//  for(i = 0; i < N; i++) cout << setw(4) << d[i];
//  cout << endl;
	
  cout << "nieuporzadkowany: ";
	sortowanieWstawianie(d);

  //tablica uporzadkowana 
  for(j = N - 2; j >= 0; j--)
  {
    x = d[j];
    i = j + 1;
    while((i < N) && (x > d[i]))
    {
      d[i - 1] = d[i];
      i++;
    }
    d[i - 1] = x;
  }

//  cout << "Tablica uporzadkowana:\n";
//  for(i = 0; i < N; i++) cout << setw(4) << d[i];
//  cout << endl;

    cout << "uporzadkowany: ";
	sortowanieWstawianie(d);

  //tablica uporządkowana odwrotnie
  int odw[N];
  int k=0;
  int temp;
  for(i=N-1;i>=0;i--){
	temp = d[i];
	odw[k] = temp;
	k++;
  }

//  cout << "Tablica uporzadkowana odwrotnie:\n";
//  for(i = 0; i < N; i++) cout << setw(4) << odw[i];
//  cout << endl;


    cout << "uporzadkowany odwrotnie: ";
	sortowanieWstawianie(odw);


  system("pause");
  return 0;
} 

 
0

Tworzysz wielkie tablice na stosie, który zwykle ma mały limit wielkości. Utwórz tablice na stercie, tzn operatorem new.

0

... albo przenieś te tablice poza main - zmienna globalna

0

Jak wyżej lub:
static int d[N];

0

możesz przechować tą tablicę na dysku i jak chcesz się odnieść do jakiegoś elementu to po prostu odnosisz się do konkretnej linijki w pliku. Wiem ,że to będzie bardzo powolne ale tak mamy praktycznie nie ograniczoną wielkość.

1 użytkowników online, w tym zalogowanych: 0, gości: 1