Selectionsort macht Probleme

xyZman

Bekanntes Mitglied
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
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();
  }
}
 

Neue Themen


Zurück
Oben