Druga największa wartość w tablicy.

0

Witam. Mam pytanie, jak znaleźć drugą największą wartość w tablicy jednowymiarowej 100-el. Próbowałem sortując i wczytując przedostatni element tablicy ale w przypadku gdy wystąpią dwie takie same wartości maksymalne to ustawia je obok siebie i wychodzi że maksymalna jest też drugą co do wielkości.

0
  1. szukasz maksymalnej MX
  2. znowu szukasz maksymalnej ale pomijasz wartości MX
0

Można to zrobić w jednym przebiegu:

dla kolejnych elementów e:
  jeżeli e > największy
    drugi_największy = największy
    największy = e
  w przeciwnym wypadku jeżeli e > drugi_największy oraz e != największy
    drugi_największy = e

Tak chyba jest dobrze, można jeszcze wprowadzić modyfikację z postu niżej, tylko trzeba ją dopasować do wersji bez błędu: w przeciwnym wypadku jeżeli e != największy.

W zasadzie to nie jest za dobry w takim kombinowaniu algorytmów więc pewnie da się to jakoś dużo lepiej zrobić.

0
Endrju napisał(a):

Można to zrobić w jednym przebiegu:

dla kolejnych elementów e:
  jeżeli e > największy
    drugi_największy = największy
    największy = e
  w przeciwnym wypadku jeżeli e > drugi_największy
    drugi_największy = e

Można to trochę zoptymalizować. Tak lekko to by było:

dla kolejnych elementów e:
  jeżeli e > drugi_największy
    jeżeli e > największy
      drugi_największy = największy
      największy = e
    w przeciwnym wypadku 
      drugi_największy = e

Dla "średniaków" będzie mniej porównań (n zamiast n*2).

0
Endrju napisał(a):

Można to zrobić w jednym przebiegu:

dla kolejnych elementów e:
  jeżeli e > największy
    drugi_największy = największy
    największy = e
  w przeciwnym wypadku jeżeli e > drugi_największy
    drugi_największy = e

a po co w ogóle część po "w przeciwnym wypadku"? :|
wprowadza jedynie ten sam błąd o którym mówi autor wątku, a bez tego działa poprawnie

0

A masz rację, to jest źle. Ale bez tego też jest źle. Trzeba to inaczej wymyślić.

Edit: poprawiłem w poprzednim poście.

1 użytkowników online, w tym zalogowanych: 0, gości: 1