# Array aufsteigend sortieren



## jessi (31. Mai 2009)

hallo, ich hab ein problem mit meinem programm und zwar soll 
ich ein array aufsteigend sortieren und das funktioniert auch schon aber 
ich darf das array nicht mehr nach dem ersten durchgang wieder und wieder ganz durchlaufen. mal ein beispiel

5 3 1 4 2-> 3 1 4 2 5 -> so jetzt nur noch bis zum vorletzten element durchlaufen, dann 1 3 2 4 5-> jetzt nur noch 3 elemente prüfen usw. und hier ist mein code 
mit dem einsweniger in meinem code wollte ich das eben erreichen aber ich weis nicht :bahnhof:

```
public class Selection2 {
	public static int[] fromBeginn(int[] array) {
		//variable wird auf falsch gesetzt
	    boolean tausche = false;
	    int einsweniger=array.length-1;
	    do {
	        tausche = false;
	        //durchläuft das array bis zum vorletzten Element
	        for (int i = 0; i < einsweniger; i++) {
	            if (array[i] > array[i+1]) {
	                int temp = array[i];
	                array[i] = array[i+1];
	                array[i+1] = temp;
	                tausche = true;
	            }
	        }
	        //bewirkt das nur noch bis zum vorletzten Element durchgelaufen wird
	        //also nicht mehr das komplett array
	        einsweniger--;
	    } while (tausche);
	    return array;
	}
	public static void main(String[]args){
		Selection2 sele=new Selection2();
		int array[]=new int[6];
		
		array[0]=1;
		array[1]=4;
		array[2]=31;
		array[3]=0;
		array[4]=6;
		array[5]=32;
		System.out.println(java.util.Arrays.toString(sele.fromBeginn(array)));
	}
}
```


----------



## SlaterB (31. Mai 2009)

was ist denn jetzt genau das Problem?
ich behaupte ungetestet, das einsweniger alles so macht wie du es willst,
hast du irgendwas anderes festgestellt oder fragst du nur zur Absicherung nach?


----------



## jessi (31. Mai 2009)

hallo, ich weis eben nicht ob dieses einsweniger dort wo ich das hingesetzt hab auch richtig positioniert ist und es dort auch seinen zweck erfüllt.

muss dieses einsweniger in die for-schleife rein oder nach die for-schleife oder in die while schleife:bahnhof:


----------



## Civilazi (31. Mai 2009)

Geh doch deinen Code mal Schritt für Schritt durch mit Zettel und Stift. 
Das einsweniger--; müsste woanders hin, nämlich wohin?


----------



## SlaterB (31. Mai 2009)

> muss dieses einsweniger in [..]

es geht hier doch um wenigstens drei Code-Zeilen, die an unterschiedlichen Stellen stehen, wie kannst du da pauschal über einen Ort reden?
alle Befehle haben ihre Aufgabe, die den Ort bestimmt

> einsweniger--;
vor oder hinter die while-Schleife zu schreiben, macht offensichtlich keinen Sinn,

ich sehe gerade, dass einsweniger--; auskommentiert ist, das hilft natürlich wenig,
das muss wieder rein, dann ist alles vorerst ok


----------



## jessi (31. Mai 2009)

also dieses einsweniger--; muss dann in die for-schleife rein damit es seine zweck erfüllt, nur dort kann es auch dementsprechend wirken


----------



## SlaterB (31. Mai 2009)

habe ich nicht gesagt und ist auch mit Denken zu lösen, 
z.B. auf dem Papier eine gesamte Sortierung durchspielen und sich anschauen wann und wie oft die Variable zu ändern ist

wenn das Denken nicht funktioniert, dann eben nicht


("das muss wieder rein" heißt "Kommentierungszeichen entfernen", 
bzw. sind im Moment auch wegeditiert, wenn ich sie mir gar nicht eingebildet hatte)


----------



## Civilazi (31. Mai 2009)

SlaterB hat gesagt.:


> ("das muss wieder rein" heißt "Kommentierungszeichen entfernen",
> bzw. sind im Moment auch wegeditiert, wenn ich sie mir gar nicht eingebildet hatte)



Nein, das war vorher tatsächlich auskommentiert, dafür stands nochmal woanders  So, wie der TO es jetzt hat, sollte es funktionieren.


----------



## jessi (31. Mai 2009)

also, bin meinen code durch gegangen und zwar soll ja das einsweniger eintreten, wenn der vergleich in der if-anweisung gemacht und die elemente getauscht wurden, dann ist das größte element am ende und jetzt soll mein einsweniger wirken, damit mein array nich mehr komplet durchläuft, beim nächsten schritt läuft die for-schleife nur noch bis zum vorletzten element durch, geht in die if-anweisung, prüft, tauscht und verringert wiedrum um eins usw., damit hab ich beschlossen, dass das einsweniger am ende der if-anweisung also direkt hinter dem tausche=true; kommen muss.


----------



## SlaterB (31. Mai 2009)

ich zitiere dein Beispiel:

> mal ein beispiel
> 5 3 1 4 2-> 3 1 4 2 5 -> so jetzt nur noch bis zum vorletzten element durchlaufen,

hier hast du schon 4x getaucht, 4x das if ausgeführt, 
würdest du jedesmal einsweniger verringern, würde die zweite Schleife nun nur noch bis zum ersten oder zweiten Element laufen?!

ganz einfach mal über die einfachsten Beispiele nachdenken


----------



## jessi (31. Mai 2009)

sch..., stimmt jetzt wie du das erklärt hast ist das irgendwie einleuchtent, danke schön


----------

