Hallo
Das Programm sortiert mehrere zufällig generierte Arrays mit den Längen 10, 100, 1000 und 10000 mit MergeSort!
Dabei wird jeweils die Zeit vor und nach dem Sortieren gemessen um fest zu stellen wie lang das Programm braucht...
Entscheidend sind jetzt die Zeilen 93, 94 und 107
Während in Zeile 93 für jeden Schleifen durchlauf die aktuelle Zeit ausgegeben werden kann
Wird eine Zeile später in 94 nur in einem von 5 fällen die Zeit gespeichert...
jmd ne idee?
Das Programm sortiert mehrere zufällig generierte Arrays mit den Längen 10, 100, 1000 und 10000 mit MergeSort!
Dabei wird jeweils die Zeit vor und nach dem Sortieren gemessen um fest zu stellen wie lang das Programm braucht...
Code:
// is needed for generating random Integers
import java.util.Random;
public class SortiereRandomArraytest {
//declaration of variables
static int numberOfElements;
static int [] array;
static long [] a;
static long [] b;
//Generates a random Integer-Array
public static int[] createArray (int numberOfElements) {
for (int i = 0; i < numberOfElements ; i++) {
Random arrayElement = new Random();
/* The message "nextInt();" takes no parameters, and returns the
* next integer in the generator's random sequence. Any Java integers,
* positive or negative may be returned. Integers returned by this message
* are uniformly distributed over the range of Java integers.
*/
array[i] = arrayElement.nextInt();
/*System.out.println(array[i]);*/
}
System.out.println();
System.out.println();
return array;
}
static void sortiere (int[] zahlen, int left, int right) {
int i, j, k;
int [] arrayTmp = new int[zahlen.length];
if (right > left) {
int middle = (right + left) / 2;
sortiere (zahlen, left, middle);
sortiere (zahlen, middle + 1, right);
//starts one position after middle and goes to the end
for (i = middle + 1; i > left; i--) {
arrayTmp[i - 1] = zahlen[i - 1];
}
//traegt ersten 3 Elemente ein (0. Array wird nicht genutzt)
for (j = middle; j < right; j++) { //von Mitte bis Ende
arrayTmp[right + middle - j] = zahlen[j + 1]; //traegt in umgekehrter Reihenfolge letzten 3 ein
}
for (k = left; k <= right; k++) { //laeuft durch gesamtes Array
if (arrayTmp[i] < arrayTmp[j]) { //wenn i (1) kleiner ist als j (r)
zahlen[k] = arrayTmp[i++]; //i in k schreiben und i um eine erhoehen
}
else { //ansonsten
zahlen[k] = arrayTmp[j--]; //j in k schreiben und j um 1 verkleinern
}
}
}
}
static void sortiereProg (int[] zahlen) {
sortiere (zahlen, 0, zahlen.length - 1); // ruft sortiere auf
}
public static void main(String [] args) {
for (int i=10; (i < 10001 ); i = i *10 ) {
//time measurement BEFORE screening procedure
a = new long[6];
System.out.println(System.currentTimeMillis());
a[(int)(Math.log10(i))-1] = System.currentTimeMillis();
numberOfElements = i;
array = new int[numberOfElements];
createArray (i);
sortiereProg(array);
//time measurement AFTER screening procedure
b = new long[6];
b [(int)(Math.log10(i))-1] = System.currentTimeMillis();
/*for (int l = 0; l < (array.length); l++) {
System.out.println(array[l]);
}*/
}
// time measurement OUTPUT
for (int k=0; (k < 5 ); k++) {
System.out.println();
System.out.print("a ");
System.out.print(k);
System.out.print(" ");
System.out.println(a[k]);
System.out.print("b ");
System.out.print(k);
System.out.print(" ");
System.out.println(b[k]);
}
for (int i=10; (i < 10001 ); i = i *10 ) {
System.out.println(((int)(Math.log10(i))-1));
}
}
}
Entscheidend sind jetzt die Zeilen 93, 94 und 107
Während in Zeile 93 für jeden Schleifen durchlauf die aktuelle Zeit ausgegeben werden kann
Wird eine Zeile später in 94 nur in einem von 5 fällen die Zeit gespeichert...
jmd ne idee?