InsertSort sortiert nicht komplett

Hallo Habo, mein kleiner Algorithmus zum sortieren hat irgendwie noch ein Problem.

Code:
public static void insertSort(int Feld[]){
		for(int j=2;j<Feld.length;j++){
			int key = Feld[j];
			int i = j-1;
			while(i>0 && Feld[i]>key){
				Feld[i+1] = Feld[i];
				i = i-1;
			}
			Feld[i+1] = key;
		}
	}
Wenn ich ein Feld "66,324,28" übergebe sortiert er nur in "66,28,324", dass 1te Element im Feld wird nicht beachtet.
Irgendwelche Ideen warum?

LG,weau
 
Wieso machst du in der for-Schleife j=2 ? hab es jetzt nur überflogen, aber da du danach ja nur ein i = j-1 nimmst, wirst du i niemals = 0 haben und Feld[0] niemals erreichen
 
Also wie schon erwähnt muss j = 1 sein und nicht j = 2. Meine Begründung vorhin war zwar falsch, aber dennoch ist es so, da du sonst erst ein Element zu spät mit dem Sortieren beginnst.
Dann hast du aber noch einen Fehler in deiner while-Schleife, den man sehr schön sieht, wenn man dein Beispiel mal wirklich per Hand durchrechnet. Du sagst i>0. Das Problem ist nun, dass dass in deinem Beispiel der 2. Durchlauf der while-Schleife mit j = 2, i = 0, key = 28 nicht mehr stattfindet. Dadurch wird aber genau das 1. Element, also die 63 nicht mehr mit key verglichen.
Mache also noch i >= 0 und das sollte funktionieren
 
Ich kann dir für solche Fälle nur ans Herz legen, entweder dir das mal Schritt für Schritt im Debugger anzusehen oder wirklich mal deinen Code zu nehmen und dann jeden Schritt per Hand auf Papier durchzugehen. Dabei fällt einem so ein Fehler dann recht schnell auf
 
Zurück
Oben