carlosmay |
» 2015-10-18 23:46:25 Napisz cały kod z zainicjalizowaną tablicą, bo na razie to dyskusja jest bez sensu. int tab[] = { 2, 1, 3, 5, 3 }; dla takiego ciągu twój kod pomija 2 w sortowaniu. ciag: 2,1,3,5,4
dla i=1, j=1 mamy tab[1] > tab [2] czyli 2 > 1 to zamieniamy kolejnosc i mamy ciag: 1,2,3,5,4
|
czy to nie jest paplanie dla paplania? |
|
maciek1o3s Temat założony przez niniejszego użytkownika |
» 2015-10-18 23:48:13 Musisz od razu być taki niemiły? Chyba po to jest forum żeby zapytać się o to czego się nie wie nie rozumie. Gdybym znalazł odpowiedź lub dobry opis tego skryptu w książce nie traciłbym czasu na wyjaśnianie zagadnień na forum.
Także jeżeli jest ktoś na tyle miły i mógłby odpowiedzieć mi czemu mamy zewnętrzne for (jesli to wewnetrzne juz mi uporzadkowalo caly rzad? Po co mam algorytmowi kazac przechodzic przez wszystkie i od i=1 do i=n-1 jesli wszystko co mialo byc zrobione zostalo zrobione dla i=1?) byłbym wdzięczny.
@carlosmay: Chodzi mi o to, że jeśli dla i=1 wykonuje całe sortowanie to po co mam potem przelatywać jeszcze przez wszystkie i aż do i<N? To będą 4 puste loopy do wykonania. |
|
carlosmay |
» 2015-10-18 23:51:05 Musisz od razu być taki niemiły? Chyba po to jest forum żeby zapytać się o to czego się nie wie nie rozumie. |
nie było takiego zamiaru. W książkach są błędy i będą. Chodzi mi o to, że jeśli dla i=1 wykonuje całe sortowanie to po co mam potem przelatywać jeszcze przez wszystkie i aż do i<N? To będą 4 puste loopy do wykonania. |
bo jak ciąg będzie bardzo długi i mocno pomieszany nie uporządkuje się po pierwszej kolejce. |
|
maciek1o3s Temat założony przez niniejszego użytkownika |
» 2015-10-18 23:55:06 Cały kod spróbowałem napisać, ale nie jest on poprawny bo wywala mi błąd na cpp.sh #include <iostream> #include <string>
int tab[] = { 2, 1, 3, 5, 3 };
void BubbleSort() { for( int i = 1; i < 5; i++ ) for( int j = 1; j <= 5 - i; j++ ) if( tab[ j ] > tab[ j + 1 ] ) { int x = tab[ j ]; tab[ j ] = tab[ j + 1 ]; tab[ j + 1 ] = x; } }
błąd to: /usr/lib/gcc/x86_64-linux-gnu/4.9/../../../x86_64-linux-gnu/crt1.o: In function `_start': (.text+0x20): undefined reference to `main' collect2: error: ld returned 1 exit status Chciałbym zauważyć tylko, że mnie nie chodzi o pisanie tutaj programu ale o zrozumienie czemu mamy zewnętrzną petlę for, jeśli nasza tabela zostaje uporzadkowana dla warunku i=1 (chyba, że moj sposob rozumowania ktory jest ponizej jest zly): dla i=1, j=1 mamy tab[1] > tab [2] czyli 2 > 1 to zamieniamy kolejnosc i mamy ciag: 1,2,3,5,4 dla j=2 mamy nie spelniony warunek tab[2]>tab[3] dla j=3 mamy nie spelniony warunek tab[3]>tab[4] dla j=4 mamy spelnione 4<=5-1 i tab[4]>tab[5] tak wiec mamy juz tutaj uporzadkowana tabele 1,2,3,4,5ale algorytm o tym nie wie wiec lecimy dalej dla j=5 mamy nie spelnioy warunek j<=n-i, bo mamy 5<=4 to dalej mamy: i=2, j=1 i lecimy od poczatku calosc, tylko po co jeśli tabela już jest uporządkowana? |
|
michal11 |
» 2015-10-18 23:57:51 Miałem już nie pisać, ale ciągle wybierasz sobie tablicę dla której akurat to zadziała, spróbuj z 5,4,3,2,1 |
|
carlosmay |
» 2015-10-19 00:01:41 for( int i = 0; i < 5; i++ ) for( int j = 0; j < 5 - 1; j++ ) if( tab[ j ] > tab[ j + 1 ] ) { int x = tab[ j ]; tab[ j ] = tab[ j + 1 ]; tab[ j + 1 ] = x; }
tak powinno to wyglądać. |
|
maciek1o3s Temat założony przez niniejszego użytkownika |
» 2015-10-19 00:03:46 @michal11: Dzięki, teraz rozumiem.
@carlosmay: Dzięki, ale uważam że nie masz racji. Po pierwsze nadal wywala błąd na cpp.sh, a po drugie to wersja z j<=n-i jest lepsza bo jest szybsza (nie sprawdzasz koncowki ktora juz uporzadkowales). |
|
carlosmay |
» 2015-10-19 00:05:56 Wywala, bo nie masz funkcji main() i program nie ma jak zacząć działać. j <= n - i dla tego tab[ j + 1 ] wyjdzie poza zakres tablicy. |
|
1 2 « 3 » 4 |