insertionsort

Status
Nicht offen für weitere Antworten.

babuschka

Top Contributor
hier mein code warum auch immer funzt er nicht richtig kann mal bitte jemand nachschauen? :)
Code:
import java.util.Random;
public class insertion
{
    public void Insertion(int Anzahl)
    {
        int tmp;
        int j;
        Random generator = new Random();
        int [] array  = new int [Anzahl];
        for (int l=0;l<Anzahl;l++)
        {
        array[l]=generator.nextInt(10000)+1;
        }
        long time1 =System.currentTimeMillis();
        for (int i=1;i<array.length;i++)
        {
            if (array[i]<array[i-1])
            {
            tmp=array[i];
            j=i;
            do 
            {
                j--;
                array[j+1]=array[j];
            }
            while(j>0&&tmp<array[j]);
            array[j]=tmp;
            }
        }
     for (int k=0;k<array.length;k++) // ausgabe der Zahlen zum zeitmessen deaktiviert
     System.out.println(array[k]);
       System.out.print (System.currentTimeMillis() - time1);

    }
}
 

Leroy42

Top Contributor
BlackPanther277 hat gesagt.:
naja das programm sortiert einfach nicht

Kein Wunder! Dein Algorithmus hat rein gar nichts mit InsertionSort zu tun!

schau dir mal wiki insertion sort an.

Da hast du sowohl ein Java-Source-Code als auch ein wirklich
schön animierts Java-Applet zur Verdeutlichung dieses Sortierverfahrens. :D
 

nebulo

Bekanntes Mitglied
Naja gar nichts kann man nichts sagen:

hier hab deinen Algorithmus ausnahmsweise mal korrigiert:

Code:
import java.util.Random;
public class Insertion
{

public static void main(String args[]){
	new Insertion().insertion(10);
}
    public void insertion(int Anzahl)
    {
       int tmp;
        int j;
        Random generator = new Random();
        int [] array  = new int [Anzahl];
        for (int l=0; l<Anzahl; l++)
        {
        array[l]=generator.nextInt(10000)+1;
        }

        long time1 =System.currentTimeMillis();
        for (int i=0; i<array.length; i++)
        {
            tmp=array[i];
            j=i;
	    while(j>0 && array[j-1] >= tmp){
		array[j] = array[j-1]; // nach rechts schieben
		j--;
	    }	
	    array[j]=tmp;
        }
     for (int k=0;k<array.length;k++) // ausgabe der Zahlen zum zeitmessen deaktiviert
     System.out.println(array[k]);
       System.out.print (System.currentTimeMillis() - time1); 
}
}

EDIT: Gewöhne dir mal einen schönen Stil an und halte Konventionen ein wie:

Klassennamen schreibt man groß.
Methodennamen chreibt man klein.

Schau dir vielleicht mal die Java Code Conventions an http://java.sun.com/docs/codeconv/html/CodeConvTOC.doc.html
 

babuschka

Top Contributor
hmm ich hab mir jetzt ma den sourcecode angeschaut aber das ist doch das gleiche bis auf das da nur while und nicht ne do while schleife verwendet wird oder bin ich jetzt blind oder hab ich einfach das mit dem do while falsch gemacht :?:
 

babuschka

Top Contributor
aber so ganz verstehe ich deine änderungen nicht da ich mit bluej(bin noch ganz am anfang) arbeite brauch ich ja keine public static void main aber ansonsten hast du doch nur die do-while schleife zu ner einfachen while schleife gemacht und den startpunkt einen nach vorne gesetzt oder irre ich mich da?
 

nebulo

Bekanntes Mitglied
Im Prinzip müsste es auch mit einer do..while gehen. Aufjedenfall ist die Abfrage die du drin hast nicht korrekt. Und generell würde ich eher darauf verzichten do...while zu benutzen wenn es nicht zwingend erforderlich ist.
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben