Selectionsort

marvpaul

Mitglied
Guten Tag, probiere schon die ganze Zeit eine Methode zu schreiben die Selectionsort anwendet. Wo liegt mein Fehler? :(
Java:
public class Selectionsort {
		 int zahlenfeld[] = new int [10]; //Zahlenwert erzeugen
		 Selectionsort(){
			 for (int i = 0; i < zahlenfeld.length; i++){ //Zahlenfeld Zufallszahlen von 0 - 100 zuweisen 
				 zahlenfeld[i] = (int) (Math.random()*100);
			 }
		 }
	 void unsortiert(){
		 for (int i = 0; i < zahlenfeld.length; i++){ //Durchlauf des Feldes
			 System.out.print(zahlenfeld[i] + " "); //Ausgabe der Feldvariablen 
		 }
		 System.out.println(" "); //Leerzeile nach Ausgabe des kompletten Feldes
	 }
	 void sortieren(){
		 
		 int stelle = 0; //Stelle der kleinsten Zahl
		 int hilfe; //Zwischenspeicher beim Tauschen
		 for (int j = 0; j < zahlenfeld.length-1; j++){ 
			 int kleinstezahl = 100;
			 for (int i = 0; i < zahlenfeld.length-j; i++){ //Durchlauf des Feldes - Abstand
				 if (zahlenfeld[i+j] < kleinstezahl)
					 stelle = i+j; //Stelle der kleinsten Zahl im unsortierten Teil des Feldes ermittelt 
			 }
			 //Tausch
			 if (stelle != 0){
			 hilfe = zahlenfeld[j];
			 zahlenfeld[j]=zahlenfeld[stelle];
			 zahlenfeld[stelle]=hilfe;
			 stelle = 0;
			 for (int i = 0; i < zahlenfeld.length; i++){ //Durchlauf des Feldes
				 System.out.print(zahlenfeld[i] + " "); //Ausgabe der Feldvariablen 
			 }
			 System.out.println(" ");
			 }
			 
		 }
		 for (int i = 0; i < zahlenfeld.length; i++){ //Durchlauf des Feldes
			 System.out.print(zahlenfeld[i] + " "); //Ausgabe der Feldvariablen 
		 }
	 }

}
 

Joose

Top Contributor
Wir können dir gerne helfen, schneller geht es natürlich wenn du uns auch sagst was für einen Fehler du bekommst?

Anregung: Statt die 10 Werte immer per Random zu wählen solltest du mal mit 10 fixen Werten arbeiten. Dadurch kannst du leichter feststellen ob eine Änderung etwas bewirkt bzw. was sie bewirkt.
 

marvpaul

Mitglied
Also Code habe ich jetzt so umgeändert:
Java:
public class Selectionsort {
		 int zahlenfeld[] = {5, 3, 6, 8, 1, 8};//Zahlenwert erzeugen
	 void unsortiert(){
		 for (int i = 0; i < zahlenfeld.length; i++){ //Durchlauf des Feldes
			 System.out.print(zahlenfeld[i] + " "); //Ausgabe der Feldvariablen 
		 }
		 System.out.println(" "); //Leerzeile nach Ausgabe des kompletten Feldes
	 }
	 void sortieren(){
		 
		 int stelle = 0; //Stelle der kleinsten Zahl
		 int hilfe; //Zwischenspeicher beim Tauschen
		 for (int j = 0; j < zahlenfeld.length-1; j++){ 
			 int kleinstezahl = 100;
			 for (int i = 0; i < zahlenfeld.length-j; i++){ //Durchlauf des Feldes - Abstand
				 if (zahlenfeld[i+j] < kleinstezahl)
					 stelle = i+j; //Stelle der kleinsten Zahl im unsortierten Teil des Feldes ermittelt 
kleinstezahl = zahlenfeld[i+j];
			 }
			 //Tausch
			 if (stelle != 0){
			 hilfe = zahlenfeld[j];
			 zahlenfeld[j]=zahlenfeld[stelle];
			 zahlenfeld[stelle]=hilfe;
			 stelle = 0;
			 for (int i = 0; i < zahlenfeld.length; i++){ //Durchlauf des Feldes
				 System.out.print(zahlenfeld[i] + " "); //Ausgabe der Feldvariablen 
			 }
			 System.out.println(" ");
			 }
			 
		 }
		 for (int i = 0; i < zahlenfeld.length; i++){ //Durchlauf des Feldes
			 System.out.print(zahlenfeld[i] + " "); //Ausgabe der Feldvariablen 
		 }
	 }

}

Habe mit eingebaut das nach jedem Durchgang der ersten Schleife das jetzige Array ausgegeben wird.
Ich bekomme als Ausgabe in der Konsole:
5 3 6 8 1 8
1 3 6 8 5 8
1 5 6 8 3 8
1 5 3 8 6 8
1 5 3 6 8 8
1 5 3 6 8 8
1 5 3 6 8 8

Eigl. sollte am Ende aber stehen:
1 3 5 6 8 8

Warum sortiert er nicht richtig?

//Edit: Habe vergessen meine Variable kleinstezahl während des Schleifendurchlaufs zu aktualisieren, trotz Änderung funktioniert das Sortieren jedoch nicht ganz
 
Zuletzt bearbeitet:

Joose

Top Contributor
Java:
			 for (int i = 0; i < zahlenfeld.length-j; i++){ //Durchlauf des Feldes - Abstand
				 if (zahlenfeld[i+j] < kleinstezahl)
					 stelle = i+j; //Stelle der kleinsten Zahl im unsortierten Teil des Feldes ermittelt 
kleinstezahl = zahlenfeld[i+j];
			 }

Ein Fehler ist mir jetzt doch aufgefallen :)
Bei diesem "if" fehlen die Klammern. So wird der Wert "kleinstezahl" immer geändert.

PS: Bei korrekter Formatierung (Einrückung) bzw. zwingender Klammersetzung sieht man solche Fehler immer schnell.
 
Zuletzt bearbeitet:

Ähnliche Java Themen

Neue Themen


Oben