Sortowanie tablicy 2D

0

Witam, mam za zadanie uzyskac taki efekt sortowania:
1 2 4
2 1 3
1 1 5

1 1 3
1 1 4
2 2 5

 public static void PosortujTablice(int[,] tab, int x, int y)
        {
            for (int i = 0; i < x-1; i++)
            {
                for (int j = 0; j < y-1; j++)
                {
                    if (tab[j, i] > tab[j+1, i])
                    {
                        int temp = tab[j, i];
                        tab[j, i] = tab[j + 1, i];
                        tab[j + 1, i] = temp;
                    }
                }
            }
        }

Zaimplementowalem tu sobie bubble sort ale niestety efekt tego sortowania nie jest zadowalajcy. Prosilbym o jakas wskazowke gdzie jest blad. Widzialem inne rozwiazania tego problemu ale ja chcialbym skorzystac z tego na ktore ja wpadlem chyba ze jest ono bez sensu to o tym tez chcialbym sie dowiedzeic.
Pozdrawiam

1

Musisz posortować n-zbiorów są one ułożone w dosyć osobliwy sposób, ale jest ich n. I teraz dwa podstawowe pytania

  1. Ile pętli potrzeba by przejść ten zbiór?
  2. ile bublesort potrzebuje pętli?

A w konsekwencji ile razem trzeba pętli. Następna rzecz a w zasadzie znowu dwie rzeczy

for (int i = 0; i < x-1; i++)
  1. Jeśli zakładałeś tab[x,y] i na potrzebujesz posortować z góry do dołu to zewnętrzna pętla po czym powinna przechodzić?
  2. Ostatniego rzędu nie ma potrzeby sprawdzania?

Mam nadzieję ,że zrozumiałeś moje pytania. Celowo piszę to w ten sposób ,żebyś sam spróbował dojść do swoich błędów.

0

Zewnętrzna pętla powinna mieć jednak zasięg od 0 do x. Jest oczywiscie potrzeba sprawdzenia ostatniego rzedu a dokladnie mam na mysli ze petla wewnetrzna powinna byc od 0 do y ale wtedy wychodzi ona poza zakres tablicy bo mamy w pewnym momencie tab[3,0]. Wynika to oczywiscie z tego ze porownujac elementy w kolumnie tablicy mamy taka a nie inna logike

tab[j, i] > tab[j+1, i]

no i w tym momencie sam sie zapetlam bo albo musze zmienic sposob porownania elementow albo zakres. Po moich obserwacjach wynika ze brakuje zdeycdowanie 3ciego przejscia petli tej wewnetrznej.

        public static void PosortujTablice(int[,] tab, int x, int y)
        {
            for (int i = 0; i < x; i++)
            {
                for (int j = 0; j < y-1; j++)
                {
                    if (tab[j, i] > tab[j+1, i])
                    {
                        int temp = tab[j, i];
                        tab[j, i] = tab[j + 1, i];
                        tab[j + 1, i] = temp;
                    }
                }
            }
        }
    }
0

Nie odpowiedziałeś na najważniejsze pytanie ile powinno być pętli. A więc ja ci odpowiem powinny być 3: 1 na przejście po kolekcji i dwie na sortowanie bombelkowe. Na początku musisz napisać pętle ,która będzie chodziła z góra na dół czyli pętla od 0 do y . A potem dopiero sortowanie bombelkowe po wymiarze x

0

Chyba nie rozumiem dalej, w jakim sensie petla przechodzaca po kolekcji? Jak ma to techniczne wygladac, w sensie no wchodzi w petle a i wniej robi to i to, wchodzi w petle b i pozniej w c ale jak ma byc logika w tych petlach ?

1

Logika ma być cały czas ta sama tylko pętle muszą być 3.


            for (int i = 0; i < y; i++)
            {
                for (int j = 0; j < x - 1; j++)
                {
                    for (int z = 0; z < x - j - 1; z++)
                    {

j jest tylko do powtarzania czynności . Musisz do indeksowania tablicy używać z,i

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