# Zweigrößte zahl



## owni (18. Apr 2010)

Hi,

hab zwar in der Suche und in Google gesucht, aber leider nichts passendes gefunden.

Ich wollte mal fragen, wie ich vorgehen müsste, wenn ich in einem Array, die Zweitgrößte Zahl herausfinden möchte. Ohne Sortierung !!!

Kann mir jemand da einen Impuls geben zur Vorgehensweise?

Gruß
owni


----------



## HoaX (18. Apr 2010)

Mit ein bisschen logischem Denken ist das doch ganz einfach. Wie würdest du es denn machen wenn du die größte Zahl willst?
Du würdest sicherlich von vorne nach hinten das Array durchgehen und dir die erste Zahl merken, und dann immer schauen ob die nächste Zahl größer ist.
Um jetzt die Zweitgrößte zu finden musst du nur im Falle, dass es nicht die größte ist, nochmal schauen ob die akt. Zahl größer als die zweite gemerkte Zahl ist. Und wenn die akt. die Größte ist musst du die bisherige Größte als Zweitgrößte merken.
Logisch, ne?


----------



## owni (18. Apr 2010)

Hi,

jap irgendwie klingt das logisch 


Irgendwie happerts bei mir aber in der Umsetzung::rtfm:

[Java]
    			if ( max >= a_){
    					 if (a <=max){
    						 zweitgroesste = a;
    					 }

    			   }  
			  }[/code]

Array wird super ausgelesen etc. Mein Problem scheint in der IF zu sein. Aber wo:bahnhof:

Danke für eure Hilfe.

Gruß
owni_


----------



## cz3kit (18. Apr 2010)

Naja, eigentlich überprüfst du ja zweimal das selbe wenn ich das Richtig sehe. Wenn max = 10 und a_ = 5 ist, dann wird ja beim ersten if geschaut 10 >= 5 true. Beim zweiten if hast du ja im Prinzip das selbe, 5 <= 10 true._


----------



## owni (18. Apr 2010)

hmm,

die logik hab ich nun verstanden, aber irgendwie krieg ich das nicht hin, 

wie ich das in Java umsetzen soll.


----------



## cr33p (18. Apr 2010)

Ganz einfach:


```
Arrays.sort(deinArray);
```

damit hast du alles aufsteigend sortiert.
An das zweitgrößte kommst du dann wenn du die maximale Länge des Arrays mit 1 subtrahierst.

z.B

```
int array[] = new int[20];
        for(int i = 0; i < 20; i++)
        {
            array[i] = (int) (Math.random() * 100);
        }
        Arrays.sort(array);
        System.out.println(array[19-1]);
```

Warum 19-1?
Das Feld hat maximal 20 Elemente, die Indices davon gehen von 0 bis 19. 19 wäre das größte Element, 18 (19-1) das zweitgrößte.


----------



## eRaaaa (18. Apr 2010)

cr33p hat gesagt.:


> ganz einfach:
> 
> 
> ```
> ...



-->



> ich wollte mal fragen, wie ich vorgehen müsste, wenn ich in einem array, die zweitgrößte zahl herausfinden möchte. *ohne sortierung !!!*






```
Für jede Zahl i im Array
  falls i > max
     max2 = max;
     max = i;
  falls_nicht: ist i > max2
     max2 = i;
```

..


----------



## owni (18. Apr 2010)

Hi,

danke für die Hilfe, 

mit dem Sortieren klappts 

Wie gehts aber ohne 

Gruß
owni


----------



## cz3kit (18. Apr 2010)

Das hat eRaaaa hingeschrieben, also ohne sortierung


```
Für jede Zahl i im Array
  falls i > max
     max2 = max;
     max = i;
  falls_nicht: ist i > max2
     max2 = i;
```


----------



## owni (18. Apr 2010)

So,

habs mal versucht einzubinden 


```
int max = a[0];
        	for (int i = 0; i < a.length; i++) {

        		if (a[i]> max){
        			zweitgroesste = max;
        			max = a[i];
        		}
        			else if (a[i] > zweitgroesste){
        					zweitgroesste = a[i];
        			}	
        	}
```

Wenn ichs aber ausführe, kommt trotzdem die größte zahl, da in meinem Array die größte Zahl schon an Arraystelle [0] , also als erstes aufgerufen wird.   Bsp Array:{20,2,5,3,9,12}

Grüße
owni


----------



## faetzminator (18. Apr 2010)

Du darfst die Zuweisung von max vor der Schleife nicht machen. Am besten beiden Variablen [c]Integer.MIN_VALUE[/c] zuweisen.


----------



## Final_Striker (18. Apr 2010)

Oder du lässt die for-Schleife nicht von 0 sondern von 1 laufen, da du die erste Zahl ja schon "geprüft" hast.


----------



## faetzminator (18. Apr 2010)

...oder so. [c]zweitgroesste[/c] muss trotzdem korrekt initialisiert werden.


----------



## owni (18. Apr 2010)

ahh super :lol:

Hab int max = 0; gesetzt schon funktioniert es einwandfrei.

Danke für eure Hilfe !!!!!!

Gruß
owni


----------



## faetzminator (18. Apr 2010)

owni hat gesagt.:


> Hab int max = 0; gesetzt schon funktioniert es einwandfrei.



und [c]zweitgroesste[/c] auch? Das funktioniert natürlich nur, wenn alle Zahlen positiv sind.


----------

