Problem z sortowaniem bąbelkowym C#


(Patryk Piasecki) #1

Witam forumowiczów.

Piszę program, który ma posortować przy użyciu sortowania bąbelkowego ciąg liczb podany przez użytkownika.

Mój kod wygląda następująco (C#, Visual Studio 2015, Windows)


(Drobok) #2

Skoro twój warunek jest pusty to ciężko by liczby się zamieniały.

 


(Fizyda) #3
for(int i = a-1; i >= 0; i--)
    for(int j = 0; j < i && j < a-1; j++)
        if(tablica[j] > tablica[j+1])
        {
            int temp = tablica[i];
            
            tablica[i] = tablica[j+1];
            tablica[j] = temp;
        }

Proszę ot cały algorytm sortowana bąbelkowego.

EDIT:

Napisz jaką ocenę dostałem.

EDIT 2:

Za pierwszym razem spaliłem algorytm na maksa :D. Teraz powinno być ok, ale i tak trzeba sprawdzić bo pisałem z palca.


(kostek135) #4

http://lmgtfy.com/?q=bubble+sort+c%23


(Fizyda) #5

(Patryk Piasecki) #6

Mam jeszcze jedno pytanie, ten algorytm znasz na pamięć czy go gdzieś znalazłeś gotowego?


(floyd) #7

Jeżeli rozumie się poszczególne zapisy i rozumie zasadę sortowania bąbelkowego to “znanie na pamięć” jest oczywiste. :slight_smile:

Tu masz jeszcze wytłumaczone jak to działa.

http://www.algorytm.edu.pl/algorytmy-maturalne/sortowanie-babelkowe.html

Dla utrwalenia tej zasady w pamięci proponuję wziąć 5 klocków (wież) różnej wysokości i poustawiać w dowolnej kolejności, a następnie posortować według tej metody. Będziesz też znał na pamięć tę metodę o ile oczywiście ją zrozumiesz. :slight_smile:

No i jeszcze trzeba zrozumieć jak dokonujemy zamiany wartości dwóch liczb w szeregu.

Np. mam dwie liczby a b i niech a=3 b=5. Chcę zmienić ich wartości tak aby a=5 i b=3

 Aby tego dokonać wprowadzamy zmienną pomocniczą temp i piszemy:

temp=a : a=b: b= temp

Łatwo sprawdzić, że nie wystarczyło by napisać: a=b:b=a bo wówczas otrzymamy a=5:b=5


(Fizyda) #8

Algorytm jest jeden i go znałem - ale i tak musiałem zerknąć o co dokładnie w nim chodziło, dlatego za pierwszym razem podałem lekko błędną wersję.

Jeśli o implementacje chodzi to jest ich tak dużo jak programistów i ciężko stwierdzić która jest najlepsza. Ja lubię implementacje na dwóch pętlach for bo jest ona dla mnie czytelniejsza niż ta na pętlach do/while i for.

Jeśli znasz algorytm to go po prostu implementujesz tak jak Ci wygodnie. Jak napisałem algorytm jest jeden - zawsze ten sam, mogą być różne implementacje. Podobnie jest ze wzorcami projektowymi. Ogólnie jest tak że nie musisz uczyć się wszystkich algorytmów i wzorców na pamięć, wystarczy że mniej więcej wiesz o co chodzi i przede wszystkim wiesz do czego służą bo w tedy wiesz kiedy jaki wzorzec lub algorytm zastosować Gdy już wiesz tyle i decydujesz się na użycie np singletona lub bubble sort to tylko sprawdzasz w książce albo na internecie jak dokładnie wygląda i go implementujesz. W przypadku wzorców często jest to przykładowa implementacja.


(Patryk Piasecki) #9

Dziękuje za pomoc, temat do zamknięcia.