Gnex Napisano Październik 18, 2015 Zgłoś Udostępnij Napisano Październik 18, 2015 Witam!Napisałem program, który w domyśle miał sortować metodą bąbelkową. Jednak istnieje bardzo dziwny problem,którego nie mogę zlokalizować mianowicie dla dowolnych danych wejściowych np. 22, 21, 48 po posortowaniu wyrzuca wynik typu 3,21,22 albo 21,3,22 i nie mam bladego pojęcia czemu tak się dzieje.#include <iostream> #include <algorithm> using namespace std; void BubbleSort(int tab[]); void Wyswietl(int tab[]); int main() { int iTab[3]; cout << "Sortowanie babelkowe" << endl; cout << "Podaj 3 liczby: " << endl; for (int i = 0; i < 3; i++) { cin >> iTab[i]; } cout << "Przed sortowaniem: " << endl; Wyswietl (iTab); cout << "Po sortowaniu: " << endl; BubbleSort(iTab); Wyswietl(iTab); return 0; } void BubbleSort(int tab[]) { int n = sizeof(tab); int temp = 0; do { for (int i = 0; i < n-1; i++) { if (tab[i] > tab[i+1]) { swap(tab[i],tab[i+1]); //temp = tab[i]; //tab[i] = tab[i+1]; //tab[i+1] = temp; } } n = n - 1; }while(n>1); } void Wyswietl(int tab[]) { for (int i = 0; i < 3; i++) { cout << tab[i] << endl; } } Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Bartosz Wójcik Napisano Październik 18, 2015 Zgłoś Udostępnij Napisano Październik 18, 2015 Piszesz to w C++, pierwszy błąd jaki widzę, to że int n = sizeof(tab) n będzie miało błędny rozmiar, sizeof() nie może wiedzieć ile jest elementów w tablicy (to nie jest klasa), musisz dodatkowo taki parametr przekazywać dla funkcji sortowania, dla dynamicznych tablic po prostu liczbę, a dla statycznych możesz wykorzystać makro _countof().Drugi błąd to pętla while(n > 1). W sortowaniu bąbelkowym tak długo sortujesz dopóki żadna para nie zostanie wymieniona, ty tam dodatkowo uszkadasz zmienną N.Od ręki napisane, ale spróbuj tak:void BubbleSort(int tab[], int n) { bool wymieniono; do { // przed petla jeszcze nic nie wymieniono wymieniono = false; for (int i = 0; i < n-1; i++) { if (tab[i] > tab[i+1]) { swap(tab[i],tab[i+1]); // wymiana nastapila wymieniono = true; } } // powtarzaj wymiane dopoki cos zostalo zamienione // jesli nic juz nie bylo zamieniane - przerwij prace } while(wymieniono == true); } Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.