Sorotwanie bąbelkowe - kłopot z pierwszą pozycją posortowanej tablicy

0

Mam problem, napisałem program zgodnie z podanym algorytmem niestety sortowanie ma problem z pierwszą pozycją posortowanej tablicy.
Wpisuje losowe liczby do tablicy od 0 do 9, więc 10 liczb.
Następnie to sortuje, przykład:

wylos: 1124
wylos: 1067
wylos: 794
wylos: -258
wylos: 820
wylos: -1021
wylos: -1071
wylos: -23
wylos: -297
wylos: -885

posortowane liczby:

posort: 1067
posort: -1071
posort: -1021
posort: -885
posort: -297
posort: -258
posort: -23
posort: 794
posort: 820
posort: 1124

Jak widać liczba z drugiej pozycji wpadła mi na pierwszą pozycję tablicy posortowanej, a powinna praktycznie na koniec. Reszta jest okej. Zazwyczaj jest problem z pierwsza lub drugą liczbą.

Algorytm według pisałem według schematu:

user image

mój kod:
Losowanie liczb...

             tablica = new int[10];
            Random random3 = new Random();
            for (int i = 0; i <= 9; i++)
            {
                tablica[i] = random3.Next(-1200, 1200); ;
            }

Sortowanie:

            int n = 9;
            int p;
            int p_min = 0; //tablice mam od 0 nie od 1
            int p_max = (n - 1);
            do
            {
                p = 0;
                for (int i = p_min; i <= p_max; i++)
                {
                    if (tablica[i] > tablica[i + 1])
                    {
                        licznik3++;
                        schowek3 = tablica[i];
                        tablica[i] = tablica[i + 1];
                        tablica[i + 1] = schowek3;
                        if (p == 1) //tutaj zmiana na ==0 nie daje rozwiązania problemu
                            p_min = i;
                        p = i;
                    }
                }
                if (p_min > 1)
                    p_min--;
                p_max = p - 1;

            }
            while (p!=0);

Proszę o jakieś wskazówki co może być nie tak...

dodanie znaczników <code class="csharp"> - @furious programming

0

Wskazówka: algorytm jest pisany pod tablicę startującą od indeksu = 1.
Zamień na wersję startującą od 0.

0

p_max będzie równe n, a nie n-1

0

@vpiotr, czyżby chodziło tutaj o ten kawałek?

                if (p_min > 0) //zmiana z >1 na >0, wtedy sortuje dobrze!
                    p_min--;
                p_max = p - 1;

Chcę się upewnić, czy dobrze wydedukowałem.

0

Masz jeszcze drugiego if-a z "1" ktory jest podejrzany. Nie twierdze ze zly bo nie znam tej wersji bombelkowego. Po prostu przetestuj. Przyklady do testow: dane losowe, dane posortowane odwrotnie, dane posortowane z losowa co druga liczba (parzysta lub nieparzysta pozycja).

1 użytkowników online, w tym zalogowanych: 0, gości: 1