Sortowanie macierzy 10x10 metodą wybierania

0

Siema. Dostałem do napisania program w której mam posortować macierz 10x10 metodą wybierania. Dopiero zaczynam i nie wiem jak wygląda ta metoda. Mógłby mi ktoś z tym pomóc ? Był bym bardzo wdzięczny ;)

0

No okey, ale ja potrzebuję posortować tablicę dwuwymiarową, a nie jednowymiarową .... I w tym problem :/

Dobra trochę pozmieniałem, tylko nie wiem czy to będzie działać w ogóle. Co o tym sądzicie ?

 for(i=0; i < N; i++)

 for(j = 0; j < N - 1; j++)
  {
    pmin = j;
    for(x = j + 1; x < N; x++)
      if(d[i][x] < d[pmin]) 
	pmin = x;
    swap(d[pmin], d[i][j]);
  } 
0

sortowanie w jakim sensie? względem jakieś kolumny/wiersza?

0

Nie będzie działać.

Zamiast pytać o coś takiego napisz sobie jakieś proste testy do Twojej metody sortującej ( wygeneruj kilka losowych macierzy, wypisz na ekran, posortuj i znów wypisz na ekran) i w ten sposób sprawdzisz czy działa. Jak nie będzie działać to za pomocą debuggera łatwo sprawdzisz, w którym momencie zmienne przyjmują nieuzasadnione wartości. Dla tablicy jednowymiarowej potrzeba dwóch zagnieżdżonych pętli - tutaj będą potrzebne cztery: dwie pierwsze do przejścia po wszystkich elementach tablicy (i tu w kodzie masz pierwszy błąd - nie odwiedzasz ostatnich elementów kolejnych wierszy) dwie kolejne, które wyszukają najmniejszy element w pozostałej części (i tu masz kolejny błąd bo twoja magiczna pętla przeszukuje tylko do końca wiersza). Ten fragment

if(d[i][x] < d[pmin])

to dla mnie czysta magia i mogę się tylko domyślać co chciałeś zrobić bo to się chyba nawet nie skompiluje:).

0

Przeczytałem kilka razy twoją podpowiedź ale dalej nie rozumiem jak ma ten kod wyglądać. Okej rozumiem treść zadania i jak to ma wyglądać. I wydaje mi się że mój kod będzie w miarę dobry. Może wytłumaczę.

Muszę posortować tą macierz od elementów minimalnych do maksymalnych w wierszach. W moim kodzie macierz dwuwymiarową zapisuję jako d[i][j]. Pierwsza pętla daje i=0 ( czyli jesteśmy w pierwszym pierwszu) , druga daje j=0 ( czyli już mamy ustalone że jest to pierwszy element , d[0][0]) następnie pętla if powinna szukać elementu najmniejszego i po jego znalezieniu zamienić te dwa elementy. Po skonczeniu pętli if i zamianie wracamy się do pętli for i nadaje ona j=1 ( czyli przeskakujemy do drugiego elementu) i wszystko zaczyna się od nowa. Ja to tak rozumiem . Wszystko jest okey dopóki nie muszę tego zapisać w kodzie :P Proszę o wyrozumiałość, jestem początkujący i bez waszej pomocy raczej nie skończę sam tego programu.... ;)

0

Po skonczeniu pętli if i zamianie wracamy się do pętli for [...]

Polecam wrócić do kursu z podstawami programowania - if to instrukcja warunkowa, a nie żadna pętla.

0

O widzisz, no to się właśnie dowiedzieliśmy, że jednak nie chcesz posortować macierzy a posortować każdy wiersz z osobna. W takim układzie twój kod jest prawie ok.
Jest taki jeden gość na tym forum, który by Ci odpowiedział, że nie programujesz za pomocą lodówki i twoje IDE chyba coś ci jednak podpowiada. Twój kod ma błąd w tej linijce:

if(d[i][x] < d[pmin])

o czym już zresztą wcześniej napisałem. d[i][x] to konkretna liczba z tablicy a d[pmin] to wiersz tablicy. Jaki Twoim zdaniem jest wynik tego porównania?

0

No na prawdę nie umiem wymyślić co tam ma być zamiast d[pmin]. Proszę pomóż mi z tym :)

0

Masz algorytm do sortowania tablicy jednowymiarowej ( wektora ) . Z tego co się orientuję to nie ma problemu przejścia np z macierzy 2d na 1d i odwrotnie. Uzyskasz w ten sposób pożądany wynik

0

A w jaki sposób przejść z 2d na 1d ?

0

albo skorzystać z stla albo cos np jak for w forze - > przechodzisz po całej tablicy 2d i przy każdym elemencie wpisujesz element do nowej tablicy jednowymiarowej

1

Poruszasz się po i-tym wierszu a w zmiennej pmin trzymasz indeks, pod którym znajduje się aktualnie najmniejsza wartość. Więc dostęp do aktualnie najmniejszej wartości wiersza, w którym jesteś to: d[i][pmin]. Cały kod:

for(i=0; i < N; i++)
 
 for(j = 0; j < N - 1; j++)
  {
    pmin = j;
    for(x = j + 1; x < N; x++)
      if(d[i][x] < d[i][pmin]) 
    pmin = x;
    swap(d[i][pmin], d[i][j]);
  } 

BTW: pomysł z przejściem na tablicę jednowymiarową przy założeniu, że masz posortować wiersze nie ma najmniejszego sensu...

0

Dzięki :)

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