Cześć
Robię 3 rodzaje algorytmów sortowania, porównuję czas i tak: pierwsze (bombelkowe działa, quicksort działa, a na grzebieniowym mi program wysypało). Nawet nie pokazuje błędu, tylko po prostu padło po uruchomieniu i wpisaniu liczb. Czy ktoś wie dlaczego?
#include <iostream>
#include <time.h>
#include <windows.h>
using namespace std;
int ileliczb;
clock_t start,stop;
double czas;
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);
}
//sortowanie 3
void grzebieniowe( int tab[], int size )
{
int gap = size;
bool replace = true;
while( gap > 1 || replace )
{
gap = gap * 10 / 13;
if( gap == 0 )
gap = 1;
replace = false;
for( int i = 0; i + gap < size; i++ )
{
if( tab[ i + gap ] < tab[ i ] )
{
swap( tab[ i ], tab[ i + gap ] );
replace = true;
}
}
}
}
//--koniec sortowania 3
int main()
{
cout<<"Ile liczb: ";
cin>>ileliczb;
int *tablica;
tablica=new int [ileliczb];
int *tablica2;
tablica2=new int [ileliczb];
int *tablica3;
tablica2=new int [ileliczb];
srand(time(NULL));
for(int i=0; i<ileliczb; i++)
{
tablica[i] = rand()%1000+1;
}
for(int i=0; i<ileliczb; i++)
{
tablica2[i]=tablica[i];
}
for(int i=0; i<ileliczb; i++)
{
tablica3[i]=tablica[i];
}
cout<<"Przed posortowaniem: "<<endl;
for(int i=0; i<ileliczb; i++)
{
cout<<tablica3[i]<<" ";
}
cout<<"Sortuje babelkowym. Uwaga!"<<endl;
start = clock();
sortowanie_babelkowe(tablica,ileliczb);
stop = clock();
czas = (double)(stop-start) / CLOCKS_PER_SEC;
cout<<endl<<"Czas babelkowego: "<<czas<<" s"<<endl;
cout<<endl<<"Sortuje quicksortem. Uwaga!"<<endl;
start = clock();
quicksort(tablica2, 0, ileliczb-1);
stop = clock();
czas = (double)(stop-start) / CLOCKS_PER_SEC;
cout<<endl<<"Czas quicksortu: "<<czas<<" s"<<endl;
cout<<endl<<"Sortuje grzebieniowym. Uwaga!"<<endl;
start = clock();
grzebieniowe(tablica3, ileliczb);
stop = clock();
czas = (double)(stop-start) / CLOCKS_PER_SEC;
cout<<endl<<"Czas grzebienia: "<<czas<<" s"<<endl;
cout<<"Po posortowaniu: "<<endl;
for(int i=0; i<ileliczb; i++)
{
cout<<tablica[i]<<" ";
}
delete [] tablica;
delete [] tablica2;
delete [] tablica3;
return 0;
}