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

Object Storage Arubacloud
0 głosów
306 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 (90,870 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 676 wizyt
pytanie zadane 10 października 2018 w C i C++ przez tomason Nowicjusz (140 p.)
0 głosów
2 odpowiedzi 120 wizyt
pytanie zadane 16 maja 2023 w HTML i CSS przez niezalogowany
0 głosów
1 odpowiedź 285 wizyt
pytanie zadane 18 września 2019 w HTML i CSS przez Kubs Mądrala (5,190 p.)

92,551 zapytań

141,393 odpowiedzi

319,522 komentarzy

61,936 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...