Witam wszystkich forumowiczów po przerobieniu 14 odcinka kursu C++ Pana Zelenta robiłem prace domową i natrafiłem na taki problem że po skompilowaniu programu program wykonuje się do momentu wywołania funkcji sortuj i potem wyświetla się błąd Process terminated with status -1073741819 (0 minute(s), 10 second(s)) i dalej program się już nie wykonuje. Dodam do tego że jest to sortowanie mergesort. Pod spodem daje kod i źródłówy dziękuje każdemu kto jest chce mi pomóc.
#include <iostream>
#include <time.h>
#include <windows.h>
using namespace std;
int ile;
clock_t start,stop;
double czas;
const int MAX = 100000;
void sortowanie_babelkowe(int *tab, int n)
{
for(int i=1; i<n; i++)
{
for(int j=n-1; j>=1; j--)
{
if(tab[j]<tab[j-1])
{
int bufor;
bufor=tab[j-1];
tab[j-1]=tab[j];
tab[j]=bufor;
}
}
}
}
void quicksort(int *tablica, int lewy, int prawy)
{
int v=tablica[(lewy+prawy)/2];
int i,j,x;
i=lewy;
j=prawy;
do
{
while(tablica[i]<v) i++;
while(tablica[j]>v) j--;
if(i<=j)
{
x=tablica[i];
tablica[i]=tablica[j];
tablica[j]=x;
i++;
j--;
}
}
while(i<=j);
if(j>lewy) quicksort(tablica,lewy, j);
if(i<prawy) quicksort(tablica, i, prawy);
}
void scalaj (double T[], int lewy, int prawy)
{
int i, i_lewy, i_prawy, srodek;
double pom[MAX];
for (i=0;i<MAX;i++) pom[i]=T[i];
srodek=(lewy+prawy)/2;
i=lewy;
i_lewy=lewy;
i_prawy=srodek+1;
while (i_lewy<=srodek && i_prawy<=prawy)
{
if (pom[i_lewy]<pom[i_prawy])
{
T[i]=pom[i_lewy];
i_lewy++;
}
else
{
T[i]=pom[i_prawy];
i_prawy++;
}
i++;
}
if (i_lewy>srodek)
while (i_prawy<=prawy)
{
T[i]=pom[i_prawy];
i_prawy++;
i++;
}
else
while (i_lewy<=srodek)
{
T[i]=pom[i_lewy];
i_lewy++;
i++;
}
}
void sortuj (double T[], int lewy, int prawy)
{
int srodek=(lewy+prawy)/2;
if (lewy<srodek) sortuj(T,lewy,srodek);
if (srodek+1<prawy) sortuj(T,srodek+1,prawy);
scalaj(T,lewy,prawy);
}
int main()
{
cout << "Porownanie czasow sortowania v.1" << endl;
cout<<"Ile losowych liczb w tablicy: ";
cin>>ile;
//dynamiczna alokacja tablicy
int *tablica;
tablica=new int [ile];
int *tablica2;
tablica2=new int [ile];
double *tablica3;
tablica3=new double [ile];
//inicjowanie generatora
srand(time(NULL));
//wczytywanie losowych liczb do tablicy
for(int i=0; i<ile; i++)
{
tablica[i] = rand()%100000+1;
}
//przepisanie tablicy do tablicy2
for(int i=0; i<ile; i++)
{
tablica2[i]=tablica[i];
}
//przepisanie tablicy do tablicy3
for(int i=0; i<ile; i++)
{
tablica3[i]=tablica[i];
}
/*
cout<<"Przed posortowaniem: "<<endl;
for(int i=0; i<ile; i++)
{
cout<<tablica2[i]<<" ";
}
*/
cout<<"Sortuje teraz babelkowo. Prosze czekac!"<<endl;
start = clock();
sortowanie_babelkowe(tablica,ile);
stop = clock();
czas = (double)(stop-start) / CLOCKS_PER_SEC;
cout<<endl<<"Czas sortowania babelkowego: "<<czas<<" s"<<endl;
cout<<endl<<"Sortuje teraz algorytmem quicksort. Prosze czekac!"<<endl;
start = clock();
quicksort(tablica2, 0, ile-1);
stop = clock();
czas = (double)(stop-start) / CLOCKS_PER_SEC;
cout<<endl<<"Czas sortowania quicksort: "<<czas<<" s"<<endl;
cout<<endl<<"Sortuje teraz algorytmem mergesort. Prosze czekac!"<<endl;
start = clock();
sortuj(tablica3, 0, ile-1);
stop = clock();
czas = (double)(stop-start) / CLOCKS_PER_SEC;
cout<<endl<<"Czas sortowania mergesort: "<<czas<<" s"<<endl;
/*
cout<<"Po posortowaniu: "<<endl;
for(int i=0; i<ile; i++)
{
cout<<tablica[i]<<" ";
}
*/
delete [] tablica;
delete [] tablica2;
delete [] tablica3;
return 0;
}