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

Sortowanie przez wstawianie - problem

Ostatnio zmodyfikowano 2015-06-23 15:46
Autor Wiadomość
SiwyBLS
Temat założony przez niniejszego użytkownika
Sortowanie przez wstawianie - problem
» 2015-06-23 03:30:03
Witam!
Na szybko przed zaliczeniem poprawkowym z informatyki chciałem zrobić wszystkie sortowania i znowu ugrzęzłem z sortowaniem przez wstawianie. Znalazłem błąd, ale to przez przypadek i nie jestem w stanie zrozumieć jak zmiana tego jednego znaku wpłynęła na działanie kodu? Może ktoś ma doświadczenie z Was i pierwszym spojrzeniem to znajdzie, ja szukam rożnych granicznych "warunków" i dla obu przypadków program powinien działać.

Otóż o co chodzi:

C/C++
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;

int main()
{
    srand( time( NULL ) );
    const int n = 20;
    int tab[ 20 ];
   
   
    for( int i = 0; i < n; i++ )
    {
        tab[ i ] =(( rand() % 10 ) + 1 );
        cout << tab[ i ] << "  ";
    }
   
    cout << endl << endl;
   
   
    for( int i = 1; i < n; i++ )
    {
        for( int j = i; j > 0; j-- )
        {
            if( tab[ j ] <= tab[ j - 1 ] ) // Tu mam problem
            {
                swap( tab[ j ], tab[ j - 1 ] );
            }
           
           
            else
            {
                break;
            }
        }
    }
   
   
   
    for( int i = 0; i < n; i++ )
    {
        cout << tab[ i ] << "  ";
    }
}

 Tu gdzie dopisałem "Tu mam problem" jest właśnie problem :D Chodzi o to że tworząc warunek "<=" program działa, ale gdy zrobię warunek "<<", program już nie działa poprawnie. Po prostu nie sortuje. W mojej głowie wszystko działa ok, nie powinno być różnicy dla liczb różniących się od siebie, dopiero gdy trafią się takie same wartości to albo zamieni je ze sobą i tyle (bo skoro przy poprzednim powtórzeniu pętli nie zamienił komórki "j" i "j-1" to znaczy że warunek był spełniony) albo nie zamieni i weźmie kolejna i dopiero z nią porówna ale to już normalnie kontynuacja. Mógłby mi ktoś wytłumaczyć czy to problem jest z moimi założeniami czy gdzieś kompilator ma błąd.
Pozdrawiam.
Adam.
P-133956
docentpp
» 2015-06-23 07:21:07
Czy na pewno chcesz użyć << // podwójny znak mniejszośći//  ?  To jest operator przesunmięcia bitowego. Spróbuj <.
P-133957
SiwyBLS
Temat założony przez niniejszego użytkownika
» 2015-06-23 15:46:35
Aaa ok, masz rację. To jednak jakaś głupota była...  Dobra to dziękuje za pomoc, jeśli zobaczy to moderator, albo admin to temat do zamknięcia/usunięcia.
Pozdrawiam.
P-133977
« 1 »
  Strona 1 z 1