Laufzeitverhalten von Sortieralgorithmen darstellen

Status
Nicht offen für weitere Antworten.

master099

Mitglied
Hi,

wie haben von unserem Lehrer eine main-Methode vorgegeben und sollen dazu die Methode schreiben. Das Programm soll bei beliebigen Sortiermethoden funktionieren und dann das Laufzeitverhalten abbilden.
Ich habe soweit alle Methode fertig, nur bei der Ausgabe komme ich nicht weiter. Sie soll so aussehen:

Bubblesort:
------------------------------------------------------------------------------------------------x
----------------------------------------------------------------------------------------------x
-------------------------------------------------------------------------------------------------x
-----------------------------------------------------------------------------------------------x
-------------------------------------------------------------------------------------------------x

Quicksort:
----------x
----------x
----------x
----------x
----------x

immer 5x, weil es 5 Versuche sind

etc.

hier mein Quellcode (hab jetzt mal nur Bubblesort drin):

Code:
import java.util.*;

class Experiment {
 
 	public static void main (String [ ] args) {
 	int numberExperiments = 5; // number of experiments
 	int numberElements = 500; // number of elements in array
 	int maxRand = 1000; // random numbers 0 .. maxRand - 1
 	int scale = 1700; // scale for plotting
 	/* Integer.MAX VALUE)= 2,147,483,647
 	for reference: largest value allowed */
 
 	int [ ] array;
 	Random rd = new Random();
 	int [ ] result = new int [numberExperiments];

 	// --- BubbleSort ---
 	BubbleSort bs = new BubbleSort();
 	for (int i = 0; i < numberExperiments; i++) {
 	
 	array = Utils.allocateRandArray(rd, maxRand, numberElements);

 	bs.sort(array, numberElements);
 	result[i] = bs.count;
 	
 	}
 	
 	Utils.simplePlot("BubbleSort", result /* , scale */);


 	}
}

 class Utils {
 	
 	//Array mit Zufallszahlen fuellen
 	static int[] allocateRandArray(Random rd,  int maxRand, int numberElements) {
 		
 		int[] array = new int [numberElements];;
 		
 		for (int i=0; i<numberElements; i++) {
 			
 		array[i] = rd.nextInt(maxRand);
 		
 		}
 		return array;
 	}
 	
 	//Ausgabe
 	static void simplePlot (String name, int[] result /* , int scale */ ) {
 		
 		System.out.println(name +":");
 		
 		
 		for (int i = 0; i < result[i]; i++) {
 				
 			System.out.print("-");
 		}	
}


 //Bubblesort	
 class BubbleSort {
 	
 	int count = 0; //zaehlt die Schritte
 		
 	public BubbleSort() {
 	}
 		
 	public int[] sort(int[] array, int numberElements) {
   
    int temp;

    for (int i = 0; i < numberElements-1; i = i + 1) {
            
      	for (int j=numberElements-1; j > i; j = j - 1) {
            
        	if (array[j-1] > array[j]) {
            	temp = array[j - 1];                
            	array[j - 1] = array[j];                
            	array[j] = temp; 
            	count++;                  
        	}
      	}
    }
    return array;
  } 
}

Es geht um die Methode "simpleplot"-
Die Variable scale soll die Ausgabe auf 1700 begrenzen, da es bei Bubblesort bei 500 Array-Elementen mehr als 1700 Schritte sind. Ich hab es bis jetzt erstmal ohne scale probiert, aber schon da komm ich nicht weiter ???:L

Bitte um Hilfe
 

Tissi

Mitglied
Das Problem liegt in der for-Schleife:

Bei deinem Code werden wahrscheinlich fünf striche gemacht, dann kommt eine ArrayIndexOutOfBoundsException.
Und das kommt so:
Erster Schleifendurchlauf: i=0, result ist die Anzahl der Schritte bei Experiment 1; da 0< result wird ein Strich gemacht.
Zweiter Durchlauf: i=1, result ist die Anzahl der Sschritte bei Experiment 2 --> zweiter Strich
...
beim sechsten Durchlauf ist i = 5, result[5] existiert aber gar nicht. Daher die Exception.

Zur Lösung brauchst du zwei ineinander verschachtelte for-Schleifen; eine, die die 5 Experimente durchgeht, und eine zweite, innere, die die Striche für das jeweilige Experiment macht:

Code:
for(int i = 0; i < result.length; i++)
   for(int j = 0; j < result[i]; j++)
      System.out.print("-");
 

master099

Mitglied
danke. daran lag es

ich habe nun auch noch andere Sortieralgorithmen drin, aber ich glaube meine Auswertung haut nicht so ganz hin

Quicksort müsste doch viel weniger "-" , d.h. Bewegungen haben als InsertionSort???

Bei 200 oder mehr Elementen im Array sieht man natürlich einen grösseren Unterschied.
Quicksort sollte doch aber auch bei 50 Elementen schon deutlich weniger Bewegungen als InsertionSort haben, oder?

Die Counter sind aber denke ich an den richtigen Positionen, oder irre ich mich da?

Code:
import java.util.*;

class Experiment {
 
 	public static void main (String [ ] args) {
 	int numberExperiments = 5; // number of experiments
 	int numberElements = 10; // number of elements in array
 	int maxRand = 1000; // random numbers 0 .. maxRand - 1
 	int scale = 1700; // scale for plotting
 	/* Integer.MAX VALUE)= 2,147,483,647
 	for reference: largest value allowed */
 
 	int [ ] array;
 	Random rd = new Random();
 	int [ ] result = new int [numberExperiments];

 	// --- BubbleSort ----------------------------------------------------------
 	BubbleSort bs = new BubbleSort();
 	for (int i = 0; i < numberExperiments; i++) {
 	
 	array = Utils.allocateRandArray(rd, maxRand, numberElements);

 	bs.sort(array, numberElements);
 	result[i] = bs.count;
	
 	}
 	
 	Utils.simplePlot("BubbleSort", result /* , scale */);
 	System.out.println("");
 	
 	// --- InsertionSort -------------------------------------------------------
 	InsertionSort is = new InsertionSort();
 	for (int i = 0; i < numberExperiments; i++) {
 	
 	array = Utils.allocateRandArray(rd, maxRand, numberElements);

 	is.sort(array, numberElements);
 	result[i] = is.count;
	
 	}
 	
 	Utils.simplePlot("InsertionSort", result /* , scale */);
	System.out.println("");
	
	// --- QuickSort -----------------------------------------------------------
 	QuickSort qs = new QuickSort();
 	for (int i = 0; i < numberExperiments; i++) {
 	
 	array = Utils.allocateRandArray(rd, maxRand, numberElements);


 	qs.sort(array);
 	result[i] = qs.count;
	
 	}
 	
 	Utils.simplePlot("QuickSort", result /* , scale */);
	System.out.println("");

 	}
}

 class Utils {
 	
 	//Array mit Zufallszahlen fuellen
 	static int[] allocateRandArray(Random rd,  int maxRand, int numberElements) {
 		
 		int[] array = new int [numberElements];;
 		
 		for (int i=0; i<numberElements; i++) {
 			
 		array[i] = rd.nextInt(maxRand);
 		
 		}
 		return array;
 	}
 	
 	//Bewegungen plotten
 	static void simplePlot (String name, int[] result /* , int scale */ ) {
 		
 		System.out.println(name +":");
 		
 		for(int i = 0; i < result.length; i++) {
 		
   			
   			for(int j = 0; j < result[i]; j++) {
   			
      			
      			System.out.print("-");
			}
		}	
	}
 	
}

 //Bubblesort	
 class BubbleSort {
 	
 	int count = 0; //zaehlt die Schritte
 		
 	public BubbleSort() {
 	}
 		
 	public int[] sort(int[] array, int numberElements) {
   
    int temp;

    for (int i = 0; i < numberElements-1; i = i + 1) {
            
      	for (int j=numberElements-1; j > i; j = j - 1) {
            
        	if (array[j-1] > array[j]) {
            	temp = array[j - 1];                
            	array[j - 1] = array[j];                
            	array[j] = temp; 
            	count++;                  
        	}
      	}
    }
    return array;
  } 
}


//InsertionSort
class InsertionSort {
	
	int count = 0;
	
	public InsertionSort() {
	}
	
	
	int[] sort(int [] array, int numberElements) {

        for (int i = 1; i < numberElements; i++) {
            
            int j = i;
            int temp = array[j];
            
            while (j > 0 && array[j-1] > temp) {
                
                array[j]=array[j-1];
                j--;
            }
            
            array[j]=temp;
            count++;
        }
        return array;
    }
}

class QuickSort {
	
	int count = 0;
	
	public QuickSort() {
	}
	
	private static int[] array;

	public void sort(int[] a)
    {
        array=a;
        quicksort(0, array.length-1);
    }


    int[] quicksort (int lo, int hi)
    {
        int i=lo, j=hi;
        int x=array[(lo+hi)/2];

        //  Aufteilung
        while (i<=j)
        {    
            while (array[i]<x) i++; 
            while (array[j]>x) j--;
            if (i<=j)
            {
                exchange(i, j);
                i++; j--;
            }
        }	count++;

        // Rekursion
        if (lo<j) quicksort(lo, j);
        if (i<hi) quicksort(i, hi);
        
        return array;
        
    } 


    private static void exchange(int i, int j)
    {
        int t=array[i];
        array[i]=array[j];
        array[j]=t;
    }


}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
L Laufzeitverhalten Java Basics - Anfänger-Themen 3
C Laufzeitverhalten beim zeilenweise durchlaufen eines 2 dimensional array Java Basics - Anfänger-Themen 6
amgadalghabra Die vier Sortieralgorithmen die durchschnittliche Laufzeit in Millisekunden Java Basics - Anfänger-Themen 37
T Sortieralgorithmen richtig? Java Basics - Anfänger-Themen 1
S SortierAlgorithmen Java Basics - Anfänger-Themen 5
W Liste mit Listen in JTable darstellen Java Basics - Anfänger-Themen 1
X Wie kann man ein Regex erstellen, die 8-Bit-Binär-Zahlen darstellen. Java Basics - Anfänger-Themen 1
M Parse-Tree eines statements darstellen Java Basics - Anfänger-Themen 0
H Binominalkoeffizient tail-rekursiv in java darstellen Java Basics - Anfänger-Themen 0
S CSV Datei auslesen und anders darstellen Java Basics - Anfänger-Themen 2
F Hierarchi im code darstellen Java Basics - Anfänger-Themen 11
CptK Best Practice Merge-Sort als Baum darstellen Java Basics - Anfänger-Themen 3
E Kreis soll eine Raupe darstellen Java Basics - Anfänger-Themen 37
Orkanson Long Binär darstellen Java Basics - Anfänger-Themen 1
J Eingelesene Datei im Histrogramm darstellen Java Basics - Anfänger-Themen 3
pkm Best Practice BufferedImage in JPane darstellen - aber wie? Java Basics - Anfänger-Themen 22
D Klassen Wert aus JTextfield in JLabel (andere Klasse) darstellen. Java Basics - Anfänger-Themen 60
kilopack15 DoWhile-Schleife als While-Schleife darstellen Java Basics - Anfänger-Themen 9
X Minimax-Algorithmus über alle Kanten möglich? - Kanten darstellen Java Basics - Anfänger-Themen 1
E Input/Output Switch ausgabe anpassen bzw. anders darstellen Java Basics - Anfänger-Themen 13
L Mit java ein wort mehrfach versetzt darstellen Java Basics - Anfänger-Themen 14
H Wav-Datei grafisch darstellen Java Basics - Anfänger-Themen 2
3 Gitternetz richtig darstellen Java Basics - Anfänger-Themen 3
Messoras Sortieralgorithmus graphisch darstellen Java Basics - Anfänger-Themen 6
M Konkatenation in Sequenzdiagramm darstellen Java Basics - Anfänger-Themen 0
I Anzahl der Rechenschritte darstellen lassen Java Basics - Anfänger-Themen 11
Z Vector in jTextField/jLabel darstellen Java Basics - Anfänger-Themen 4
N Erste Schritte MySQL Tabelle in JList darstellen Java Basics - Anfänger-Themen 1
F Wurzelzeichen darstellen, Wie? Java Basics - Anfänger-Themen 7
V Intervall als Array darstellen Java Basics - Anfänger-Themen 10
A OOP Buchstaben mit ASCII Werten darstellen Java Basics - Anfänger-Themen 1
B Einfache jsp Seite darstellen Java Basics - Anfänger-Themen 9
P Erste Schritte Buffered Image splitten und darstellen Java Basics - Anfänger-Themen 2
U Exponent ausgeben bzw. darstellen Java Basics - Anfänger-Themen 15
H Wie kann ich in Java unbekannte Variablen in Gleichungen darstellen? Java Basics - Anfänger-Themen 3
J Zeichen für Durchmesser Ø in Label darstellen Java Basics - Anfänger-Themen 15
F Erste Schritte bild darstellen Java Basics - Anfänger-Themen 2
J Ein Grafisches Gitternetz (für Schiffe versenken) darstellen - Wie? Java Basics - Anfänger-Themen 6
P Zahlen als Unicode darstellen Java Basics - Anfänger-Themen 2
F Koordinaten JList darstellen Java Basics - Anfänger-Themen 4
A double and add algorithmus für elliptische kurven/ integer binär darstellen Java Basics - Anfänger-Themen 14
M Bild in Applet darstellen Java Basics - Anfänger-Themen 6
T Input/Output Scanner Eingaben auf Console farbig darstellen, wie? Java Basics - Anfänger-Themen 13
S String mit ASCII/HTML Zeichen darstellen Java Basics - Anfänger-Themen 10
D Graphics2D (Welle darstellen) Java Basics - Anfänger-Themen 2
D Problem: Deutschlandkarte darstellen ? Java Basics - Anfänger-Themen 12
Beckenbauer Eine anstehende (sehr simple) Applikation in UML darstellen (Klassendiagramm) Java Basics - Anfänger-Themen 20
D Kreissegment darstellen Java Basics - Anfänger-Themen 16
C Sortieralgorithmus grafisch darstellen Java Basics - Anfänger-Themen 3
alderwaran objekthierarchie darstellen während der laufzeit Java Basics - Anfänger-Themen 2
F FileSystem in Baum darstellen/wurzel festlegen Java Basics - Anfänger-Themen 3
E Auschnitt einer Liste darstellen Java Basics - Anfänger-Themen 7
I Baum graphisch darstellen Java Basics - Anfänger-Themen 2
A Klassen als GUI darstellen Java Basics - Anfänger-Themen 3
S Skatblatt darstellen durch Random? Java Basics - Anfänger-Themen 48
B OOP Comparator - Sortierung "optisch" Darstellen Java Basics - Anfänger-Themen 17
Forlan " <- Darstellen Java Basics - Anfänger-Themen 5
C Zwei Klassen in einem Fenster darstellen Java Basics - Anfänger-Themen 32
S RBTree - baumstruktur darstellen Java Basics - Anfänger-Themen 7
T Tupelweises Darstellen Java Basics - Anfänger-Themen 14
Z Java in HTML darstellen Java Basics - Anfänger-Themen 4
Y Einfachen Quelltext in UML darstellen mit Eclipse Java Basics - Anfänger-Themen 8
A Umlaute darstellen Java Basics - Anfänger-Themen 4
A bilddateinamen aus array auslesen und bild darstellen? Java Basics - Anfänger-Themen 2
T ASCII Tabelle darstellen Java Basics - Anfänger-Themen 7
S String Hochzahlen darstellen Java Basics - Anfänger-Themen 6
G BigDecimal mit zwei Nachkommastellen darstellen Java Basics - Anfänger-Themen 2
K Kurve Darstellen Java Basics - Anfänger-Themen 4
A Einfachstes HTML in Java darstellen Java Basics - Anfänger-Themen 4
T Inhalt einer Datei in Jlist darstellen Java Basics - Anfänger-Themen 6
G Wert im Eingabedialog darstellen Java Basics - Anfänger-Themen 2
B Bild in JFrame darstellen geht irgendwie nicht Java Basics - Anfänger-Themen 13
X Java Applet offline darstellen Java Basics - Anfänger-Themen 8
E Schreiben in Excel -Zellen farbig darstellen Java Basics - Anfänger-Themen 4
A mathematische Funktionen grafisch darstellen Java Basics - Anfänger-Themen 8
M Dateisystem in Jtree - Ordnericon darstellen Java Basics - Anfänger-Themen 4
V Text in Eingabefeld mehrfarbig darstellen? Java Basics - Anfänger-Themen 6
Z Netzwerk graphisch Darstellen Java Basics - Anfänger-Themen 5
S Verzeichnis darstellen Java Basics - Anfänger-Themen 3
S Funktionsgleichungen darstellen Java Basics - Anfänger-Themen 4
H Application vernünftig darstellen und beenden Java Basics - Anfänger-Themen 2
J Mehrere Objekte in einem JFrame darstellen Java Basics - Anfänger-Themen 6
deetee Kommazahl richtig darstellen Java Basics - Anfänger-Themen 4
M Sortieralgorythmen bzw. Suchalgorythmen grafisch darstellen Java Basics - Anfänger-Themen 3
G Zeichen darstellen Java Basics - Anfänger-Themen 5
Chucky Rekursion grafisch darstellen anhand eines Applets Java Basics - Anfänger-Themen 14
C Image-Objekt darstellen Java Basics - Anfänger-Themen 6
K mehrere DB Einträge in einem JTable darstellen ?HILFE! Java Basics - Anfänger-Themen 2
G Mit Java (und Eclipse) Diagramme darstellen Java Basics - Anfänger-Themen 4
N ein Array in zwei verschiede TextAreas darstellen Java Basics - Anfänger-Themen 6
M Mit Koordinaten, JToolTip auf JPanel darstellen Java Basics - Anfänger-Themen 3
M Grafik auf einem JPanel erneut darstellen Java Basics - Anfänger-Themen 3
G jEditorPane: inhalt ohne zeilenumbruch darstellen. wie? Java Basics - Anfänger-Themen 3
B Geometrische Formen optional darstellen Java Basics - Anfänger-Themen 3
G File auslesen u. Inhalte als table in neuem file darstellen Java Basics - Anfänger-Themen 6
P Daten aus Datenbank in einer JComboBox darstellen Java Basics - Anfänger-Themen 4
Y JTextField: Zahlen darstellen Java Basics - Anfänger-Themen 5
G Binärbaum grafisch darstellen Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben