• 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
100 wizyt
pytanie zadane 6 dni temu 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ź 6 dni temu przez Benek Maniak (67,100 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 6 dni temu 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 5 dni temu przez Tnifey Stary wyjadacz (12,490 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ź 5 dni temu przez MikDal Mądrala (5,000 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 121 wizyt
pytanie zadane 10 października 2018 w C i C++ przez tomason Nowicjusz (140 p.)
0 głosów
1 odpowiedź 71 wizyt
pytanie zadane 22 stycznia 2018 w Algorytmy przez supergosc44 Początkujący (250 p.)
0 głosów
1 odpowiedź 82 wizyt
Porady nie od parady
Publikując kody źródłowe korzystaj ze specjalnego bloczku koloryzującego składnię (przycisk z napisem code w edytorze). Nie zapomnij o ustawieniu odpowiedniego języka z rozwijanego menu oraz czytelnym formatowaniu kodu.Przycisk code

60,244 zapytań

105,928 odpowiedzi

220,065 komentarzy

32,445 pasjonatów

Przeglądających: 170
Pasjonatów: 3 Gości: 167

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.

...