Witam, mam taki programik generujacy liczby, sortuje je i zapisujace je do pliku. Przy duzych tablicach powyzej 100 000 , jest crash :/ Fakt ze jest typ int, lecz zmienialem na long, long int i jest to samo :/ Jakies pomysly ? Jestem poczatkujacy i fakt jest zlepek c i c++ ;p Wczesniej programowalem tylko w c.
#include <cstdlib>
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;
void sortSzybkie(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) sortSzybkie(tablica,lewy, j);
if (i<prawy) sortSzybkie(tablica, i, prawy);
}
void sortSzybkie2(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) sortSzybkie(tablica,lewy, j);
if (i>prawy) sortSzybkie(tablica, i, prawy);
}
int main(){
cout<<"Program tworzy tablice o rozmiarze podanym przez uzytkownika \n";
int n;
cout<<"Podaj wielkosc tablicy: ";
cin>>n;
int t[n];
srand(static_cast<unsigned int>(time(0)));
for(int a=0; a<n; a++){
*(t+a)=rand() % 201-100; // losowanie w zakresie <-100;100>
}
FILE *out;
out=fopen("sort_random.txt","w"); // zapisywanie do pliku liczb wygenerowanych losowo
fprintf(out,"%i ",n); // zapisanie do pliku pierwszej liczby oznaczającej wielkosc tablicy
for (int a=0;a<n;a++){
fprintf(out,"%i ",*(t+a)); // zapisanie do pliku reszty wygenerowanych liczb
}
fclose(out);
sortSzybkie(t,0,n-1); // sortowanie quicksort rosnaco
FILE *out1;
out1=fopen("sort_rosnaco.txt","w"); // zapisywanie do pliku liczb posortowanych rosnaco
fprintf(out1,"%i ",n); // zapisanie do pliku pierwszej liczby oznaczającej wielkosc tablicy
for (int a=0;a<n;a++){
fprintf(out1,"%i ",*(t+a)); // zapisanie do pliku reszty wygenerowanych liczb
}
fclose(out1);
sortSzybkie2(t,0,n-1); // sortowanie quicksort malejaco
FILE *out2;
out2=fopen("sort_malejaco.txt","w"); // zapisywanie do pliku liczb posortowanych malejaco
fprintf(out2,"%i ",n); // zapisanie do pliku pierwszej liczby oznaczającej wielkosc tablicy
for (int a=0;a<n;a++){
fprintf(out2,"%i ",*(t+a)); // zapisanie do pliku reszty wygenerowanych liczb
}
fclose(out2);
}