Sortowanie i sprawdzanie czasu

0

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;
}


4

Tak na szybko

    int *tablica3;
    tablica2=new int [ileliczb];

wskaźnik **tablica3 **jest bombą z opóźnionym zapłonem (brak inicjalizacji), którą bawisz się w późniejszej pętli.

0

@TomaszLiMoon: poprawione, dziękuję

2
TomaszLiMoon napisał(a):

Tak na szybko

    int *tablica3;
    tablica2=new int [ileliczb];

wskaźnik **tablica3 **jest bombą z opóźnionym zapłonem (brak inicjalizacji), którą bawisz się w późniejszej pętli.

https://godbolt.org/z/s5bKxofjn

po poprawce literówki:
https://godbolt.org/z/fdK4bEhMG

https://dsp.krzaq.cc/post/176/ucze-sie-cxx-kiedy-uzywac-new-i-delete

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