c++ Sortowanie Merge na tablice dynamicznych
Ostatnio zmodyfikowano 2017-11-13 18:50
fifi_xd Temat założony przez niniejszego użytkownika |
c++ Sortowanie Merge na tablice dynamicznych » 2017-11-13 16:06:40 Witam, mam problem z wysłaniem do funkcji Merge tablicy o dużych rozmiarach. Program nie ma żadnych błędów przy kompilacji. Problem zaczyna się przy uruchamianiu dla tablicy o rozmiarach 1024-262144 działa natomiast dla wyższego rozmiaru wyskakuje błąd " Program przestał działać poprawnie z powodu wystąpienia problemu. System Windows...". Zastanawiałem się, czy może wychodzę poza rozmiar tablicy ale wydaje mi się że nie. Oto mój kod w 3 plikach: main.cpp #include "m.h" #include "t.h"
using namespace std;
int main() { ofstream plik( "wynik.txt" ); for( int i = 1024; i <= 1048576; i = i * 2 ) { int * tab = new int[ i ]; wpisanie( tab, i ); Merge_Sort( tab, 0, i - 1 ); cout << i << "\t"; delete[] tab; } plik.close(); return 0; } m.h: #ifndef M_H_INCLUDED #define M_H_INCLUDED #include <iostream> #include <algorithm> #include <limits> #include <ctime> #include <cstdlib> #include <climits> #include <math.h> #include <fstream> #include "ekran.h" using namespace std; template < typename T > void Merge( T * A, int p, int q, int r ) { int n1 = q - p + 1; int n2 = r - q; T L[ n1 + 1 ]; T R[ n2 + 1 ]; for( int i = 0; i <= n1; i++ ) { if( i < n1 ) { L[ i ] = A[ p + i ]; } else { L[ i ] = INT_MAX; } } for( int j = 0; j <= n2; j++ ) { if( j < n2 ) { R[ j ] = A[ q + j + 1 ]; } else { R[ j ] = INT_MAX; } } int i = 0, j = 0; for( int k = p; k <= r; k++ ) { if( L[ i ] < R[ j ] ) { A[ k ] = L[ i ]; i++; } else { A[ k ] = R[ j ]; j++; } } }
template < typename T > void Merge_Sort( T * A, int p, int r ) { int q = 0; if( p < r ) { q =( p + r ) / 2; Merge_Sort( A, p, q ); Merge_Sort( A, q + 1, r ); Merge( A, p, q, r ); } } #endif
t.h: #ifndef T_H_INCLUDED #define T_H_INCLUDED #include <iostream> #include <string> #include <vector> #include <algorithm> #include <limits> #include <ctime> #include <cstdlib> #include <climits> #include <math.h> #include <fstream> using namespace std;
template < typename T > void wpisanie( T * tablica, int elementy ) { for( int i = 0; i < elementy; i++ ) { tablica[ i ] = rand(); } } #endif
|
|
mateczek |
» 2017-11-13 16:55:56
T L[ n1 + 1 ]; T R[ n2 + 1 ];
|
|
fifi_xd Temat założony przez niniejszego użytkownika |
» 2017-11-13 18:50:27 dziękuje za odpowiedź. Wszytko działa ;) |
|
« 1 » |