Laufzeit eines Sortier-Algorithmus ermitteln

Bitte aktiviere JavaScript!
Hallo,
ich habe ein kleines Problem.
Es sollen drei Arrays erstellt werden ein Sortiertes von 0,1,2,3,….100000 ein falsch Sortiertes 100000,99999,….0 und ein Zufällig erstelltes, diese Arrays sollen Sortiert werden wobei die Zeit ermittelt werden soll, die Array Größe soll in 1000er schritten erhöht werden, die Ausgabe soll durch Kommas separiert werden 1000,0,3,1 2000,2,6,3 ….. 100000,9999,999999,999999.
Soweit so gut, die länge der Arrays erstelle ich in einer for-Schleife, die sich jeweils um 1000 erhöht, in einer anderen for-Schleife erstelle ich die Arrays, bei jeden durchlauf ermittele ich die Zeit mit System.nanoTime();
Leider können die ermittelten Zeiten nicht stimmen, ersetze ich die erste for-Schleife und gebe die Länge des Arrays per Hand ein scheint es zu funktionieren, hat irgendjemand eine Idee was das falsch läuft.
Hier der Code:

Java:
public class InsertionSort {
    
     public static void insertionSort(int array[]) { 
            int n = array.length; 
            for (int j = 1; j < n; j++) { 
                int key = array[j]; 
                int i = j-1; 
                while ( (i > -1) && ( array [i] > key ) ) { 
                    array [i+1] = array [i]; 
                    i--; 
                } 
                array[i+1] = key; 
            } 
        }     
    
     public static void main(String a[]){
            
            for (int l = 1000; l <= 10000000 ; l += 1000){
            int[] b = new int[l];
            int[] w = new int[l];
            int[] z = new int[l];
            
            for (int m = 0; m < l ; m++){
                b[m] = m;
                w[m] = l - m;
                z[m] = (int)(Math.random()*l);
            }
            long timeStamp1 = System.nanoTime();   
            insertionSort(b);
            long timeStamp2 = System.nanoTime();
            insertionSort(w);
            long timeStamp3 = System.nanoTime();
            insertionSort(z);
            long timeStamp4 = System.nanoTime();
            System.out.println(+l+","+((timeStamp2-timeStamp1)/1000000)+","+((timeStamp3-timeStamp2)/1000000)+","+((timeStamp4-timeStamp3)/1000000));
     }   
    }
}
Die Ausgabe sieht so aus:
1000,0,4,1
2000,0,2,4
3000,0,3,1
4000,0,5,2
...
 
A

Anzeige


Vielleicht hilft dir dieser Kurs hier weiter: (hier klicken)
Passende Stellenanzeigen aus deiner Region:

Neue Themen

Oben