• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Najmniejszy element tablicy czy to oszustwo?

0 głosów
108 wizyt
pytanie zadane 12 lutego w C# i .NET przez gameone Nowicjusz (230 p.)
W zadaniu miałem utworzyć jedno wymiarową tablicę o rozmiarze, podanym przez użytkownika i losowo dodać jej elementy. Ponadto miałem znaleźć najmniejszy element tablicy.

Standardowo utworzyłem zmienną typu int o wartości podanej przez użytkownika i ją wykorzystałem przy inicjowaniu tablicy. Potem w pętli użyłem Random i tablicę zapełniłem losowymi wartościami.

Co do znalezienia najmniejszego elementu, wpadłem na pomysł, że można użyć sortowania

Array.Sort(tab);

i w ten sposób zawsze najmniejszy element będzie pierwszym, więc przy ControlWriteLine wyświetliłem tab[0]

I pytanie, czy tak można, czy powinno się to zrobić inaczej? :)

2 odpowiedzi

+3 głosów
odpowiedź 12 lutego przez Benek Maniak (69,620 p.)
Można, aczkolwiek będzie to bardziej zasobożerne w przypadku ogromnych tablic. Najprościej jest ustalić, że pierwszy element tablicy jest tymczasowym minimum. Następnie należy iterować za pomocą pętli całą tablicę i porównywać kolejne elementy z minimum. Jeśli któryś element jest mniejszy niż minimum, to tę wartość przypisać bieżącemu minimum. Gdy dojdziesz do końca tablicy, to bieżące minimum stanie się minimum globalnym.
komentarz 12 lutego przez gameone Nowicjusz (230 p.)
Dzięki :) Tak zrobiłem jak mówisz:

 

int ktorytoelement = 0;
            int najmniejsza = tab[0];

            for (int j = 1; j < tab.Length; j++)
            {
                if (tab[j] < najmniejsza)

                {
                    najmniejsza= tab[j];
                    ktorytoelement= j;

                }

            }

 

 

 

Tylko zastanawia mnie jedno, jeśli zawartość if nie objąłem nawiasami, to wychodziła błędna pozycja najmniejszego elementu, a gdy objąłem zawartość if w nawiasy wszystko działa prawidłowo. Dlaczego?
komentarz 13 lutego przez Tnifey Stary wyjadacz (13,190 p.)

jeśli nie podałeś nawiasów po if a jest spełniony warunek to wykonało się tylko następne polecenie po nim czyli najmniejsza= tab[j];

oraz zawsze wykonywało się ktorytoelement= j;

if (tab[j] < najmniejsza)
{ // wykona się cały ten blok jeśli warunek jest spełniony
    najmniejsza= tab[j];
    ktorytoelement= j;
}

/* vs */

if (tab[j] < najmniejsza)
    najmniejsza= tab[j]; // wykona się jeśli warunek jest spełniony
ktorytoelement= j; // wykona się zawsze

zapisując którytoelement zawsze jako j tak jakby ustawiasz go po prostu na ostatni element

+2 głosów
odpowiedź 13 lutego przez MikDal Mądrala (5,160 p.)

Tutaj efektywniejsze niż sortowanie i bardziej uniwersalne (bo nie tylko do tablic, ale także do list) rozwiązanie w jednej linicje z wykorzystanie LINQ:

int lowest = tab.Aggregate((previous, next) => next < previous ? next : previous)

 

Podobne pytania

0 głosów
4 odpowiedzi 124 wizyt
pytanie zadane 10 października 2018 w C i C++ przez tomason Nowicjusz (140 p.)
0 głosów
1 odpowiedź 77 wizyt
pytanie zadane 22 stycznia 2018 w Algorytmy przez supergosc44 Początkujący (250 p.)
0 głosów
1 odpowiedź 86 wizyt
Porady nie od parady
Odznacz odpowiedź zieloną fajką, jeśli uważasz, że jest ona najlepsza ze wszystkich i umożliwiła ci rozwiązanie problemu.Najlepsza odpowiedź

62,320 zapytań

108,455 odpowiedzi

226,407 komentarzy

35,125 pasjonatów

Przeglądających: 254
Pasjonatów: 7 Gości: 247

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...