Selection sort

Hallo,

ich versuche grade einen Selection Sort Algorithmus zu programmieren, gibts nen Befehl der aus nem Array den kleinsten Integer-Wert raussucht ? irgendwas mit parseInt?

Also ich leg jetzt mit
Java:
int [] menge = new int []{4,6,1,9,3}

ne menge fest und will diese jetzt durch gehen und das kleinste Element suchen
 

Andi_CH

Top Contributor
Ja gibt es in meinem eigenen Code und sieht so aus:

Java:
	private static int sucheMin(int[] pArr) {
		int min = Integer.MAX_VALUE;
		for(int i : pArr) {
// na ja, etwas solltest du selbst noch nachdenken :-)
		}
		return min;
	}

Mach einen konstruktiven Vorschlag wie du diese Funktion implementieren würdest und ich helf dir weiter wenn sie nicht funktioniert ;-)
 
ok also die for-schleife hab ich shcon mal
Java:
public static void sortiere (int[]array){
	array = new int []{4,6,1,9,3}; 
	int min = Integer.MIN_VALUE;
	for (int i=0;i<array.length;i++)
		min =array[1];
	
}

Das Problem ist jetzt schreibt er ja immer wieder alles an die erste Stelle, oder ? bzw. passt das überhaupt mit dem minvalue?
 
so hab sie jetzt umgeschrieben

Java:
public static void sortiere (int[]array){
	array = new int []{}; 
	int min = Integer.MIN_VALUE;
	for (int i=0;i<array.length;i++)
		min =array[0];
		for (int j=0;j<array.length()-1;j++)
			min = array[1];



}
public static void main (String []args){
	 int[] test ={ 4, 2, 8, 5,9, 1,3,6,0,7 }; 
	System.out.println(sortiere(test));
}

Das Problem ist ich bin mit nicht sicher ob das mit dem length()-1 passt weil das unterringelt wird, außerdem hab ich hierfür wieder nur die ersten zwei stellen, muss ich noch ne while schleife einbauen bis er fertig ist ?
 
G

Gast2

Gast
Java:
	public static void sortiere (int[]array){
	    array = new int []{}; 
	    int min = Integer.MIN_VALUE;
	    for (int i=0;i<array.length;i++)
	        min =array[0];
	        for (int j=0;j<array.length-1;j++)
	            min = array[1];
	 
	 
	 
	}
	
	public static void main (String []args){
	     int[] test ={ 4, 2, 8, 5,9, 1,3,6,0,7 };
	     sortiere(test);
	    System.out.println(Arrays.toString(test));
	}

Da fehlt aber noch das sortieren... ;)
 

Andi_CH

Top Contributor
so hab sie jetzt umgeschrieben

Java:
public static void sortiere (int[]array){
	array = new int []{}; 
	int min = Integer.MIN_VALUE;
	for (int i=0;i<array.length;i++)
		min =array[0];
		for (int j=0;j<array.length()-1;j++)
			min = array[1]; // Studier mal ganz genau darüber nach!



}
public static void main (String []args){
	 int[] test ={ 4, 2, 8, 5,9, 1,3,6,0,7 }; 
	System.out.println(sortiere(test));
}

Das Problem ist ich bin mit nicht sicher ob das mit dem length()-1 passt weil das unterringelt wird, außerdem hab ich hierfür wieder nur die ersten zwei stellen, muss ich noch ne while schleife einbauen bis er fertig ist ?

Denk erst mal über Zeile 7 nach -
die Probleme der fehlenden Deklaration sind ja mit einem Mausklick gelöst
 
Java:
public static void sortiere (int[]array){
	array = new int []{}; 
	int min = Integer.MIN_VALUE;
	for (int i=0;i<array.length;i++)
		min =array[0];
		for (int j=0;j<array.length-1;j++)
			min = array[j+1];

	

}
public static void main (String []args){
	 int[] test ={ 4, 2, 8, 5,9, 1,3,6,0,7 }; 
	System.out.println(sortiere(test));
	
}
}

jetzt müsste das Programm doch eigentlich in der ersten for schleife das kleinste element suchen und an die erste stelle setzen, dann in der zweiten müsste er wieder das kleinste suchen und an die j+1 stelle setzen oder ?

oder hab ich da was übersehen? muss bei der 2. for-schleife eventuell noch genauer angeben dass er nicht nur eins wegstreichen soll, sondern genau das erste damit er das nicht nochmal ausgibt ? und wieso funktioniert das mit dem test in der main-methode nicht ?
 
B

bone2

Gast
du nimmst das übergebene array und überschreibst es erstmal mit einem neuem leeren array und gehst dann mit 2 for-schleifen (oder besser: gehst du nicht, da length==0) durch das neue leere array und ersetzt min mit array[0] und array[1]. das ergibt alles keinen sinn

eine methode die nichts, also void zurück gibt kann man nicht als string mit syso ausgeben


wenn du erstmal nur das kleinste element finden möchtest, empfehle ich dir zuerst mal irgend einen kleiner als vergleich einzubauen. eine gute referenz zum anfangen ist Integer.MAX_VALUE
 
Zuletzt bearbeitet von einem Moderator:
ok jetzt hab ich das mit dem leeren Array shcon mal gecheckt

Java:
public static void sortiere (int[]array){
	
	for (int i=0;i<array.length;i++)
	System.out.print("unsortiert"+array[i]);
	
	int min = Integer.MIN_VALUE;  

	for (int i=0;i<array.length;i++)
		min =array[0];
		for (int j=0;j<array.length-1;j++)
			min = array[j+1];
		System.out.println("");
for (int i=0;i<array.length;i++)
	System.out.print("sortiert"+array[i]);

}
public static void main (String []args){
	 int[] test ={ 4, 2, 8, 5,9, 1,3,6,0,7 }; 
	sortiere(test);
	
}

gut, jetzt sortiert er aber in der Tat nicht obwohl ich doch 2 For-Schleifen drin hab und dieses coole min, wieso macht er das nicht ? und wie war das mit dem Vergleichen gemeint?
 
B

bone2

Gast
naja beim sortieren muss man irgendwo überprüfen ob eine zahl kleiner ist als die anderen zahlen im array. kein vergleich, keine sortierung

[c]if (array < min) {tue was}[/c]
 
Also Leute ich bin am Ende, ich krieg das nicht hin ich habs jetzt in 3 Methoden aufgeteilt trotzdem hab ich keine Ahnung wie er das machen soll dass er das sotiert
Java:
	public static void kleinste (int[]array){
	int min = Integer.MAX_VALUE;	
		for (int i=0; i<array.length; i++)
			if (array[i]<min){
				min=array[i];
				
			}
	}
	public static void sortiere (int []array){
		
	}
		public static void main (String []args){
		 int[] test ={ 4, 2, 8, 5,9, 1,3,6,0,7 }; 
		sortiere(test);
		
	}
}

Ist das irgendwas richtig? Ist die Methode kleinste richtig ?
 
G

Gast2

Gast
Ist das irgendwas richtig? Ist die Methode kleinste richtig ?

Nein, alleine schon das die Methode keinen Rückgabewert (void) hat ist falsch. du willst der Methode ja einen Array geben und sie soll dir die Position des kleinsten Elements zurückgeben:
Java:
    public static int kleinste (int[]array){
        int minPosition = 0;
        int min = Integer.MAX_VALUE;    
        for (int i=0; i<array.length; i++)
            if (array[i]<min){
                min=array[i];
                
            }
        return minPosition; 
    }

Jetzt konzentrier dich ertsmal drauf das die diese Methode die Position des kleinsten Wertes zurückgibt.
 
B

bone2

Gast
Java:
    public static void main(String [] args) {
        int[] zahlen = {4,3,2,1,5,8,9};
        System.out.println(kleinste(zahlen));
    }

    public static int kleinste (int[]array){
        int min = Integer.MAX_VALUE;

        for (int i=0; i<array.length; i++) {

            if (array[i]<min){
                min=array[i];
            }
        }

        return min;
    }

mit int statt void und einem return bekomsmt du dann auch den wert zurück und kannst ihn dir ausgeben. an sich aber richtig
 
ok danke, aber ich komm trotzdem nicht drauf, wie das gehen soll, dass er jetzt dann die 2. Zahl nimmt und weiter sortiert, bzw. die nächst größere Zahl.

ich hab ne methode sortiere geschrieben und wollte die methode kleinste per for schleife durchlaufen lasen aber das geht auch nicht irgendwie geht gar nichts
 
B

bone2

Gast
wie wäre es mit:
-nach dem kleinsten suchen
-das kleinste in ein neues array speichern und im alten löschen
schleif rumwickeln und so oft machen wie das array lang ist, dann das fertige array ausgeben
 

Der Müde Joe

Top Contributor
Der Algo geht doch eigentlich so:

for(i:0 ... n)
kleinstesElement = i;
for(j:i...n)
wenn element[j] kleiner als element[kleinstesElement]: keinstesElement = j;

swappe: kleinstesElement mit i

EDIT:
Nachzulesen in
The Art of Computer Programming Volume 3. s 139ff (Kunth)
und
in Sedgewick aktuellem Kurs:
COS 226, Spring 2010: Lectures
(4)
 
Zuletzt bearbeitet:
Java:
	public static void main(String [] args) {
        int[] zahlen = {0,1,4,3,2,5,8,9};
        System.out.println(kleinste(zahlen));
    }
 
    public static int kleinste (int[]array){
        int min = Integer.MAX_VALUE;
 
        for (int i=0; i<array.length; i++) {
 
            if (array[i]<min){
                min=array[i];
                            }
           for (int j=i+1;j<array.length-1;j++)
        	   if (array[i]<min)
        		   min=array[i+1];
        }
 
        return min;
    }

jetzt hab ich ne zweite for schleife in die erste eingebaut und einfach alles +1 gemacht, aber ne wirkung hat es trotzdem nicht ? wie beschrieben hat es mit der 2. Methode nicht funktioniert, aber wieso funktioniert das mit der 2. For-Schleife nicht ? merkt er sich das i nicht ? bzw. wie kann ihc das machen dass er sich das merkt ?
 
scheiße hab die anderen Beiträge nicht gesehen, gut dann mach ich das mal

ps wieso such ich nicht nach dem minimum ? da kommt doch überall 0 raus wenn ichs kompilier
 
B

bone2

Gast
Die zweite schleife ergibt einfach keinen sinn, mal dir doch mal auf papier auf was da passiert und füge in jede schleife bei "min =" ein system.out.println(min); ein und schau was du eigentlich machst

die kleinste methode war in ordnung so wie sie war, du brauchst noch eine sortier methode mit ner schleife
 

Andi_CH

Top Contributor
Meinen Nerven zu liebe - ich halte es wirklich nicht mehr aus!

Java:
	public static int groesste (int[]array){
		int max = Integer.MIN_VALUE;

		for (int i=0; i<array.length; i++) {
			if (array[i]>max){
				max=array[i];
			}
		}
		return max;
	}

und wenn du es jetzt nicht schaffst - ja ich weiss ich bin wieder mal böse - Guck mal
 

Landei

Top Contributor
:p
Java:
    public static int groesste (int[] array){
        int max = Integer.MIN_VALUE;
        for (int k : array) 
            max = java.lang.Math.max(k, max);
        return max;
    }
 

Der Müde Joe

Top Contributor
...wobei mich das grösste keinste Gedusel immer noch irgendwie komisch tönt für einen SelectionSort.
Oder wie soll der Algo dann ablaufen? Mach ein neues Array ( +O(N) Space). Finde Grössten. Setzt in ans Ende des Arrays und entferne ihn vom originalen Array (= Arraycopy oder was?) und mach das nochmals?
 
B

bone2

Gast
...wobei mich das grösste keinste Gedusel immer noch irgendwie komisch tönt für einen SelectionSort.
Oder wie soll der Algo dann ablaufen? Mach ein neues Array ( +O(N) Space). Finde Grössten. Setzt in ans Ende des Arrays und entferne ihn vom originalen Array (= Arraycopy oder was?) und mach das nochmals?

naja das ist eine möglichkeit zu sortieren oder?

ich habe 10 zahlen vor mir, nehm die kleinste weg und packe sie an den anfang meiner neuen reihe, dann guck ich die zahlen wieder an und nehm wieder die kleinste weg und leg sie neben zahl1 usw bis alle zahlen sortiert in meiner neuen reihe liegen
 

Der Müde Joe

Top Contributor
>naja das ist eine möglichkeit zu sortieren oder?

Wenn auch eine sehr Ineffiziente. (mal ausser betrach gelassen, dass Selection sowieso lahm ist)

>ich habe 10 zahlen vor mir, nehm die kleinste weg und packe sie an den anfang meiner neuen reihe,

Wieso noch gleich 'in-place'. Such das kleinste, vertausche es mit der ersten Stelle. Mach das gleiche einfach
nicht mehr über das ganze Array sondern lass die erste Stelle weg (Subarray von i...n und swap nach i).
 
G

Gast2

Gast
...wobei mich das grösste keinste Gedusel immer noch irgendwie komisch tönt für einen SelectionSort.

Ne, das macht auch keinen Sinn. Es geht nicht darum das kleinste Element zurück zu geben, sondern den Index des kleinsten Elements im Array. (Auch wenn man mit dem kleinsten Element natürlich in einer weiteren Schleife den Index bestimmen könnte ;))

Auch wenn ich mich jetzt wieder unbeliebt mache*
Java:
import java.util.Arrays;

public class Aufgabe {
	public static void main(String[] args) {
		
		int[] array = new int[]{1,9,10,3,88,2,6,32,0,4};
		selectionSort(array);
		System.out.println(Arrays.toString(array));
	}
	
	public static int getMinElemIndex(int[] array, int index){
		int minElemIndex = index;
        for (int idx=index+1; idx<array.length; idx++) {
            if (array[minElemIndex] > array[idx]) {
            	minElemIndex = idx;
            }
        }
        return minElemIndex;
	}
	
	public static void selectionSort(int[] array) {
	    for (int idx=0; idx<array.length-1; idx++) {
	        int minElemIndex = getMinElemIndex(array,idx);
	        if (minElemIndex != idx) { 
	            int temp = array[idx];
	            array[idx] = array[minElemIndex];
	            array[minElemIndex] = temp;
	        }
	    }
	}

}

* allerdings würde er da auch drauf kommen wenn er einmal nach "Selection sort java" googlen würde, in den ersten 3 Treffern, z.B. Java: Selection Sort
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
KogoroMori21 Textdatei einlesen im Array (Selection Sort Algorithmus) Java Basics - Anfänger-Themen 3
Marc111111111 Selection Sort in Java?? Java Basics - Anfänger-Themen 6
J Fehler im Selection Sort Java Basics - Anfänger-Themen 5
B 2 dimensionales Array: Selection Sort Java Basics - Anfänger-Themen 4
N Selection Sort Problem Java Basics - Anfänger-Themen 19
J Liste von Integers mit Selection Sort sortieren Java Basics - Anfänger-Themen 3
E Selection Sort für beliebige Objekte Java Basics - Anfänger-Themen 24
U Selection Sort schnellere Variante Java Basics - Anfänger-Themen 17
T Selection-Sort-Algorithmus Java Basics - Anfänger-Themen 9
I Selection-Sort // Array *help* Java Basics - Anfänger-Themen 2
J Selection Sort in Liste implementieren Java Basics - Anfänger-Themen 3
0 Selection Sort funktioniert nicht. Java Basics - Anfänger-Themen 3
N Selection Algorithmus: Methode wird nicht erkannt (BlueJ) Java Basics - Anfänger-Themen 3
Salo JTabel Selection listener Bsp. Java Basics - Anfänger-Themen 3
M The Selection cannot be launched... Java Basics - Anfänger-Themen 4
S Selection does not contain a main type! Java Basics - Anfänger-Themen 5
S Selection does not contain a main type Java Basics - Anfänger-Themen 12
T selection method does not contain a main type Java Basics - Anfänger-Themen 7
F JTable speichern, Fehler bei Selection Java Basics - Anfänger-Themen 3
K Erste Schritte selection does not contain a main type Java Basics - Anfänger-Themen 3
J "this selection cannot be launched..." eclipse fehlermeldung Java Basics - Anfänger-Themen 7
V Eclipse "Selection does not contain a main type" Java Basics - Anfänger-Themen 13
I deselect oder Selection aufheben Java Basics - Anfänger-Themen 2
B Selection does not contain a main type Java Basics - Anfänger-Themen 2
S jList Multiple Selection mit Klick Java Basics - Anfänger-Themen 2
T Auf Selection warten Java Basics - Anfänger-Themen 7
R JPopupMenu + single selection Java Basics - Anfänger-Themen 8
emreiu Formatiertes Output bei Insertion Sort Java Basics - Anfänger-Themen 6
O Sortieren mit Insertion Sort Java Basics - Anfänger-Themen 3
Tw1Z Erste Schritte Sort in java Java Basics - Anfänger-Themen 2
M Bubble Sort - Int[] Array sortieren Java Basics - Anfänger-Themen 2
X Collections.sort als Lambda Java Basics - Anfänger-Themen 14
berserkerdq2 Geht collections.sort bei allen? Linkedhashset, ArrayList, HashSet etc. Java Basics - Anfänger-Themen 4
L Insertion Sort bei zweidimensionalem Array Java Basics - Anfänger-Themen 7
G Insertion Sort mit Aray Java Basics - Anfänger-Themen 5
O Collections.sort und List.sort mit Lambda Verwirrung Java Basics - Anfänger-Themen 5
B Collections.sort mit zwei Bedingungen? Java Basics - Anfänger-Themen 4
M Collection.sort sortiert nicht Java Basics - Anfänger-Themen 7
CptK Best Practice Merge-Sort als Baum darstellen Java Basics - Anfänger-Themen 3
P Java Bubble Sort,Anfängerfehler Java Basics - Anfänger-Themen 4
S Methoden Sort Array Java Basics - Anfänger-Themen 9
I Erste Schritte sort() vs. sort() Java Basics - Anfänger-Themen 9
BadBat ArrayList<String> sort by last word Java Basics - Anfänger-Themen 8
U Methoden Zweidimensionales Array mit Arrays.sort sortieren? Java Basics - Anfänger-Themen 22
X Quick Sort - Vergleichsoperationen zählen Java Basics - Anfänger-Themen 0
O Insertion Sort Java Basics - Anfänger-Themen 4
N Bubble Sort sortieren mit Int Werte Java Basics - Anfänger-Themen 8
C OOP array Sortieren ohne den sort Befehl Java Basics - Anfänger-Themen 10
S int-Array mittels Arrays.sort() in einer Schleife sortieren. Java Basics - Anfänger-Themen 2
N Schlüsselworte Bubble Sort nach eigener Ordnung Java Basics - Anfänger-Themen 8
O Listen sort-Methode Java Basics - Anfänger-Themen 1
M Quick Sort Java Basics - Anfänger-Themen 4
V Heap-Sort Java Basics - Anfänger-Themen 0
M Methoden Quick Sort Java Basics - Anfänger-Themen 5
T array.sort mit zwei Kriterien Java Basics - Anfänger-Themen 8
S Liste und Bubble Sort Java Basics - Anfänger-Themen 4
H Collections Was ist schneller - HashMap + Sort v TreeMap? Java Basics - Anfänger-Themen 75
S Fehler bei Arrays.sort(array) - Methode!? Java Basics - Anfänger-Themen 3
P collections.sort Java Basics - Anfänger-Themen 2
B Arrays.sort Java Basics - Anfänger-Themen 4
P schneller Sort ? Java Basics - Anfänger-Themen 2
S Bubble Sort Java Basics - Anfänger-Themen 5
B Merge-Sort Analyse Java Basics - Anfänger-Themen 27
K Array.sort() Java Basics - Anfänger-Themen 12
H Etwas wie sort() / sorted() in JAVA-Collections? Java Basics - Anfänger-Themen 5
F Methoden Insert Sort Fehler Java Basics - Anfänger-Themen 10
P Ein sort problem Java Basics - Anfänger-Themen 6
S Bubble Sort Algorithmus Java Basics - Anfänger-Themen 3
Spin sort tokens - somebody knows a better solution? Java Basics - Anfänger-Themen 13
B Strings alphabentisch sortieren mit Hilfe von insertion sort Java Basics - Anfänger-Themen 6
P Array.sort // Arrays ausgeben Java Basics - Anfänger-Themen 21
S String sortieren mit Interface und sort() Java Basics - Anfänger-Themen 6
F Arrays.sort( ) Problem Java Basics - Anfänger-Themen 14
Dit_ Collections.sort(..); | Anwendung Java Basics - Anfänger-Themen 4
N java.util.Arrays.sort Warum sind Leerzeichen vor alphabetischen Zeichen sortiert? Java Basics - Anfänger-Themen 12
D Insertion sort auf eine liste Java Basics - Anfänger-Themen 4
X Counting Sort Java Basics - Anfänger-Themen 5
P Problem mit Insertion Sort Java Basics - Anfänger-Themen 4
G Quick Sort - bin ich zu blöd? Java Basics - Anfänger-Themen 7
D sort.exe über java aufrufen Java Basics - Anfänger-Themen 2
V Bubble Sort endet in Endlosschleife Java Basics - Anfänger-Themen 4
S Collection<Typ> sort Java Basics - Anfänger-Themen 4
hedges Insertion Sort Algorithmus problem Java Basics - Anfänger-Themen 18
N Collections Sort ArrayList<> Java Basics - Anfänger-Themen 7
K Arrays.sort() Java Basics - Anfänger-Themen 2
S Collection Sort Java Basics - Anfänger-Themen 15
O Arrays und sort Java Basics - Anfänger-Themen 4
G sort(int[] a, int fromIndex, int toIndex) Java Basics - Anfänger-Themen 5
F Klassenmethode Arrays.sort(Object[]a) Java Basics - Anfänger-Themen 2
H Bubble sort array Java Basics - Anfänger-Themen 12
M Bubble-Sort und null Werte Java Basics - Anfänger-Themen 4
G Zählen von Zuweisungen bei Bubble Sort Java Basics - Anfänger-Themen 3
I Methode Arrays.sort(Object[] arr) Java Basics - Anfänger-Themen 19
K compareTo in Verbinug mit Arrays.sort() Java Basics - Anfänger-Themen 4
D Frage zu Collection.sort bzw. Comparator u. Comparable Java Basics - Anfänger-Themen 2
U Array.sort auf variable Array-Größe anwenden Java Basics - Anfänger-Themen 3
D Mit java.util.Arrays.sort die negativen Zahlen hinten Java Basics - Anfänger-Themen 4
D Collections.sort() frage Java Basics - Anfänger-Themen 6
V Sortieren mit Bubble-Sort Java Basics - Anfänger-Themen 5
G Arrays.sort() will nicht sortieren Java Basics - Anfänger-Themen 8

Ähnliche Java Themen

Neue Themen


Oben