Sortowanie przez wstawianie - problem
Ostatnio zmodyfikowano 2015-06-23 15:46
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: #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 ] ) { 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. |
|
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 <. |
|
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. |
|
« 1 » |