Tablice-sortowanie liczb
Ostatnio zmodyfikowano 2015-07-04 22:31
GregoryIwanek Temat założony przez niniejszego użytkownika |
Tablice-sortowanie liczb » 2015-07-04 12:44:23 Cześć. Wszystko w ramach ćwiczenia, więc tak czy siak proszę o nie wstawianie pomysłów na inne podejście do tematu. Chcę zrozumieć, dlaczego wychodzi tak a nie inaczej tym sposobem... Tak jak w temacie, chciałem zrobić sobie algorytm w którym podaje się liczbę elementów w tablicy ( jest zawsze mniejsza niż 999, więc z góry wiem, jaka ta tablica musi być) i który później posortuje w niej elementy od najmniejszego do największego. Wymąciłem coś takiego ( fragment większego kodu). Chodzi mi mianowicie o to, jaki jest błąd myśleniowy w części sortującej elementy w tablicy. Dla 15<x<135 ( liczba komórek do wypełnienia) wszystko ładnie sortuje, ale jeżeli wpiszę ilość komórek do wypełnienia z poza tego przedziału, to część wyników wyświetlana jest jako 0, 1, 256 ( no i nie w kolejności). #include <iostream> #include <ctime> #include <cstdlib> using namespace std;
int main() { int x, tablica_wartosci[ 999 ], nie_najmniejszy_element; srand( time( NULL ) ); cin >> x; for( int i = 0; i < x; i++ ) { tablica_wartosci[ i ] = rand(); cout << tablica_wartosci[ i ] << endl; } for( int i = 0; i < x; i++ ) { for( int j = 1; j < x; j++ ) { if( tablica_wartosci[ i ] > tablica_wartosci[ i + j ] ) { nie_najmniejszy_element = tablica_wartosci[ i ]; tablica_wartosci[ i ] = tablica_wartosci[ i + j ]; tablica_wartosci[ i + j ] = nie_najmniejszy_element; } } } cout << endl; for( int i = 0; i < x; i++ ) { cout << tablica_wartosci[ i ] << endl; } return 0; };
Jeśli gdzieś było dokładnie to samo, to nie znalazłem poprzez szukaj. [/i] |
|
pekfos |
» 2015-07-04 14:17:55 for( int i = 0; i < x; i++ ) { for( int j = 1; j < x; j++ ) { if( tablica_wartosci[ i ] > tablica_wartosci[ i + j ] ) {
|
Masz x elementów, a odwołujesz się do elementu i + j? Ta suma może być równa nawet niecałe 2 * x. |
|
GregoryIwanek Temat założony przez niniejszego użytkownika |
» 2015-07-04 14:54:19 Odwołanie było dobre, tylko, że wyszedłem z odwołaniem 'i+j" poza tablicę, bo nie dałem żadnego warunku na przerwanie w takim wypadku. Poprawnie powinno być: for( int i = 0; i < x; i++ ) { for( int j = 1; j < x; j++ ) { if( i + j == x ) break; else if( tablica_wartosci[ i ] > tablica_wartosci[ i + j ] ) { nie_najmniejszy_element = tablica_wartosci[ i ]; tablica_wartosci[ i ] = tablica_wartosci[ i + j ]; tablica_wartosci[ i + j ] = nie_najmniejszy_element; } } }
Tylko, że dalej nie rozumiem dlaczego sortowało dobrze gdy x należał do 15<x<135 ;] Tak czy siak, dziękuję za chęć pomocy. Pozdro. |
|
pekfos |
» 2015-07-04 22:31:09 dalej nie rozumiem dlaczego sortowało dobrze gdy x należał do 15<x<135 ;] |
Przypadek. |
|
« 1 » |