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 ;)
- Rejestracja:prawie 10 lat
- Ostatnio:ponad 5 lat
- Postów:33


- Rejestracja:prawie 10 lat
- Ostatnio:ponad 5 lat
- Postów:33
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]);
}

- Rejestracja:prawie 11 lat
- Ostatnio:ponad rok
- Postów:182
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:).
- Rejestracja:prawie 10 lat
- Ostatnio:ponad 5 lat
- Postów:33
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.... ;)

- Rejestracja:prawie 11 lat
- Ostatnio:ponad rok
- Postów:182
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?

- Rejestracja:prawie 11 lat
- Ostatnio:ponad rok
- Postów:182
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...
- Rejestracja:prawie 10 lat
- Ostatnio:ponad 5 lat
- Postów:33