Sortowanie bąbelkowe C# - dokonczenie zadania


(Dominik 2006) #1

Witam. Z programowaniem miałem mało do czynienia, na jutro muszę dokończyć zadanie, które mieliśmy na lekcji, jest to coś z sortowaniem bąbelkowym, proszę was o pomoc, tutaj jest kod co udało się zrobić na lekcji:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;


namespace ConsoleApplication1

{

    class Program

    {

        static void Main(string[] args)

        {

            int roz;

            double pom;

            Console.WriteLine("Podaj ile elementów chcesz wyświetlić");

                roz = Convert.ToInt32(Console.ReadLine());

                double[] A = new double[roz];

                for (int i = 0; i < roz; i++)


                {

                    Console.WriteLine("Podaj " + (i + 1) + "." + " element");

                    A[i] = Convert.ToDouble(Console.ReadLine());

                }

                for (int i = 0; i < roz; i++)

                {

                    if (A[i + 1] < A[i])

                        pom = A[i];

                    A[i] = A[i + 1];

                    pom = A[i+1] ;


                }

                for (int j = 0; j < roz - 1; j++) ;


        }

    }

}

mam dokończyć w ten sposób aby program posortował i wyświetlił wprowadzone liczby :wink:

chciałbym to jakoś zrozumieć, więc gdyby ktoś jeszcze opisał co zrobił dodatkowo, wielkie dzięki


(Frankfurterium) #2

… więc napisz, czego nie rozumiesz i/lub co nie działa tak, jak byś chciał, a ktoś na pewno cię nakieruje. W ten sposób zrozumiesz zagadnienie lepiej, niż gdyby ktoś dał ci gotową implementację. Poza tym “dawanie ryby”, jeśli chodzi o zadania domowe, jest sprzeczne z regulaminem działu.


(Dominik 2006) #3

po prostu nie wiem co znaczy ta pętla:

for (int j = 0; j < roz - 1; j++) ;

i nie wiem co mam dalej pisać, co ma się później zrobić? coś ma jeszcze być czy program już może zacząć wyświetlać liczby?


(kostek135) #4

http://en.wikipedia.org/wiki/Bubble_sort

Jak można zobaczyć tu ten algorytm ma dwie zagnieżdżone pętle, czego u ciebie nie ma, więc nie będzie działał. Przejrzyj tę stronę, w oparciu o nią napiszesz to bez problemu.


#5

domek2009 , na forum używamy polskich znaków (ż, ł, ć, ś, ą itp.). Proszę wyedytować swoje posty i poprawić co trzeba. Niezastosowanie się do prośby będzie skutkowało przeniesieniem tematu do śmietnika.


(Dominik 2006) #6

nadal nie kumam, wiem ze dla was to proste ale jak nigdy z tym nie miałem do czynienia to ciężko ogarnąć to od razu.

po co wogóle jest to j w tej pętli.

rozumiem że to jest ten wycinek kodu który odpowiada za sortowanie?:

for (int i = 0; i < roz; i++)

                {

                    if (A[i + 1] < A[i])

                        pom = A[i];

                    A[i] = A[i + 1];

                    pom = A[i+1] ;


                }

to po co jakaś kolejna pętla?

pewnie stawiam głupie pytania… od czegoś trzeba zacząć.


(kostek135) #7

Z postawą “nauczcie mnie”, to daleko nie zajdziesz. Dostałeś b. dobry materiał z przykładami kodu w linku wyżej, ale to zlałeś.

Podany przez Ciebie fragment kodu odpowiada za w sumie nic, jest błędny i to co zwróci zależy od danych wejściowych, daleko temu do sortowania.

Musisz mieć dwie pętle zagnieżdżone. Pętla wewnętrzna odpowiadać ma za to, by w przypadku gdy następuje zaburzenie porządku sortowania zamienić ze sobą sąsiadujące elementy. W ten sposób n-ta iteracja przesunie liczbę max/min na n-ta pozycję. Ponieważ wykonanie k z n kroków powoduje, że k liczb jest posortowanych zewnętrzna pętla ma za zadanie skracać rozważany podciąg o 1.

Tylko ty nie masz

a) poprawnie napisanej zamiany elementów

b) zewnętrznej pętli o której mówiłem powyżej

Reasumując, dobrze wczytujesz tylko dane.