Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Sortowanie bąbelkowe

Ostatnio zmodyfikowano 2017-12-13 18:31
Autor Wiadomość
Anette
Temat założony przez niniejszego użytkownika
Sortowanie bąbelkowe
» 2017-12-13 15:01:17
Jaki błąd jest w tym fragmencie kodu? Nie rozumiem też dlaczego skutkiem jego działania jest wyświetlenie się ilości zer równej połowie wartości liczby zdefiniowanej w SIZE.

C/C++
for( int i = 0; i < SIZE; i++ )
{
    tab[ i ] = rand() % SIZE + 0;
    int swap = 0;
    do
    {
        if( tab[ i ] > tab[ i++ ] )
        {
            swap++;
            tab[ i ] = tab[ i++ ];
            tab[ i++ ] = tab[ i ];
        }
       
    } while( swap != 0 );
   
    cout << tab[ i ];[ / i ]
P-167865
Anim
» 2017-12-13 15:54:20
Zacznijmy od pierwszego błędu:

skoro w pętli for powołujesz wartości tab[i], to w każdym obiegu pętli do{}while odwołujesz się do parametru tab[i++], w którym może być wszystko, ponieważ wartość jest niezainicjowana, tz.

C/C++
tab[ i ] = rand() % SIZE + 0; // <- powołujesz pierwszą wartość tab[0], żadnej innej (mówię o pierwszym obiegu pętli for), nastęþnie wchodzisz do pętli do{}while()
int swap = 0;
do
{
    if( tab[ i ] > tab[ i++ ] ) // <- tutaj może zadziać się wszystko, bo porównujesz element tab[0] z elementem tab[1], który jeszcze nie istnieje,
    {
        swap++;
        tab[ i ] = tab[ i++ ]; //  <- dodatkowo skoro do tab[0] wpisujesz to co jest w tab[1], to
        tab[ i++ ] = tab[ i ]; // <-  tutaj do tab[1] wpisujesz to co jest w tab[0], czyli de facto to co jest w tab[1] :) musisz stworzyć jakąś dodatkową zmienną tmp, do której
        //    będziesz wpisywała wartość pośrednią, lub skorzystaj z funkcji swap()
    }
   
} while( swap != 0 );


Ja polecam przy Twoim zadaniu najpierw w jednej pętli for wypełnić tablice danymi, a następnie zacząć tworzyć algorytm sortowania bąbelkowego, który składa się z dwóch pętli for :)
P-167870
Anette
Temat założony przez niniejszego użytkownika
» 2017-12-13 18:31:31
Faktycznie, ale dlaczego w efekcie wypisywana jest ilość elementów równa połowie faktycznego SIZE?
P-167875
« 1 »
  Strona 1 z 1