• 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?

Aruba Cloud - Virtual Private Server VPS
0 głosów
374 wizyt
pytanie zadane 12 lutego 2019 w C# 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 2019 przez Benek Szeryf (93,070 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 2019 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 2019 przez Tnifey Pasjonat (24,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 2019 przez MikDal Mądrala (5,660 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 954 wizyt
pytanie zadane 10 października 2018 w C i C++ przez tomason Nowicjusz (140 p.)
0 głosów
2 odpowiedzi 191 wizyt
pytanie zadane 16 maja 2023 w HTML i CSS przez niezalogowany
0 głosów
1 odpowiedź 415 wizyt
pytanie zadane 18 września 2019 w HTML i CSS przez Kubs Mądrala (5,190 p.)

93,331 zapytań

142,323 odpowiedzi

322,400 komentarzy

62,667 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...