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
0
- szukasz maksymalnej MX
- 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.