Sortowanie tablicy 2D

Sortowanie tablicy 2D
LK
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 58
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

Kopiuj
 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

BO
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 214
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

Kopiuj
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.

LK
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 58
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

Kopiuj
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.

Kopiuj
        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;
                    }
                }
            }
        }
    }
BO
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 214
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

LK
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 58
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 ?

BO
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 214
1

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

Kopiuj

            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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.