Hi, Habe heute mit einer adt Liste den SelectionSort umsetzen wollen.
Leider kann ich den Fehler in meinem Code nicht finde..
Wenn ich keine Eingabe habe schmeißt er keine Exception, kann das also bedeuten das mein Fehler nicht sehr grob sein kann ?
Ich wäre über jede Hilfe erfreut : )
lg
FLorian
Leider kann ich den Fehler in meinem Code nicht finde..
Wenn ich keine Eingabe habe schmeißt er keine Exception, kann das also bedeuten das mein Fehler nicht sehr grob sein kann ?
Ich wäre über jede Hilfe erfreut : )
lg
FLorian
Java:
import AlgoTools.IO;
public class SelectionSort {
/**
* Ruft sort(l, position) auf, falls liste nicht leer ist
*
* @param Liste l
*/
public static void sort(Liste l){
int position = 0;
//sortiere
if (!l.empty()){
SelectionSort.sort(l, position);
}
}
/**
* Sortiert Liste rekursiv, indem von der uebergebenen Position an der Rest
* der Liste durchlaufen wird und das kleinste Element gesucht wird.
* Das kleinste Element wird vor die uebergebene Position gesetzt und die
* Liste wird rekursiv mit neuer Position aufgerufen bis die uebergebene
* Position das Ende der Liste ist.
*
* @param Liste l
* @param int position
*/
private static void sort(Liste l, int position){
l.reset();
//Zaehlvariablen
int pos = 0;
int posmin = 0;
//gehe zur uebergebenen Position
for (int i=0; i<position; i++){
l.advance();
}
//das erste Element ist zunaechst das kleinste
int min = (Integer)l.elem();
//Abbruchbedingung
if (!l.endpos()){
//Rest der Liste wird durchlaufen und nach dem kleinsten Element gesucht
while (!l.endpos()){
l.advance();
pos++;
if ((Integer)l.elem()<min){
min = (Integer)l.elem();
posmin = pos;
}
}
//gehe zur uebergebenen Position, um kleinstes Element einzufuegen
l.reset();
for (int j=0; j<position; j++){
l.advance();
}
l.insert(min);
//gehe 1 weiter, um wieder zur Position zu gelangen
l.advance();
//gehe zum kleinsten Element, um es zu entfernen
for (int k=0; k<(posmin+position); k++){
l.advance();
}
l.delete();
//rekursiver Aufruf mit neuer Position
SelectionSort.sort(l, position+1);
}
}
public static void main(String argv[]) {
//lege leere Liste an
Liste l = new VerweisListe();
//lies Integer-Folge ein
int[] a = IO.readInts("Bitte Zahlenfolge:");
//fuelle Liste mit Integer-folge
for (int i=0; i<a.length; i++){
l.insert(new Integer(a[i]));
}
//sortiere
SelectionSort.sort(l);
//gib sortierte Liste aus
IO.print("Sortierte Zahlenfolge");
l.reset();
while (!l.endpos()){
IO.print(" "+((Integer)l.elem()).intValue());
l.advance();
}
IO.println();
}
}