• 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
116 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 (72,120 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 Pasjonat (15,930 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 126 wizyt
pytanie zadane 10 października 2018 w C i C++ przez tomason Nowicjusz (140 p.)
0 głosów
1 odpowiedź 86 wizyt
pytanie zadane 22 stycznia 2018 w Algorytmy przez supergosc44 Początkujący (270 p.)
0 głosów
1 odpowiedź 88 wizyt
Porady nie od parady
Zadając pytanie postaraj się o odpowiedni tytuł, kategorię oraz tagi.Tagi

65,730 zapytań

112,373 odpowiedzi

237,243 komentarzy

46,692 pasjonatów

Przeglądających: 239
Pasjonatów: 11 Gości: 228

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.

...