Laufzeiten für Methoden über mehrere Arrays Sortier
-
29-09-2019 - |
Frage
Ich habe verschiedene Sortierverfahren, die alle die gleiche Sortierung 100.000 Zufallszahl-Array.
Ich verwende die folgende Methode die Laufzeiten der einzelnen
zu findenlong insertionStart = System.currentTimeMillis();
arr.Clone(iniArr);
arr.insertionSort();
long insertionFinal = System.currentTimeMillis() - insertionStart;
Und die folgenden für die Zufallszahl arrary
int maxSize = 100000; // array size
Sortarr arr, iniArr; // reference to array
arr = new Sortarr(maxSize); // create the array
iniArr = new Sortarr(maxSize);
// insert random numbers
Random generator = new Random();
for (int i = 0; i < maxSize; i++) iniArr.insert(generator.nextInt());
Wie kann ich das ändern, so dass ich jeden von ihnen Art 100-Arrays haben kann und nicht nur eine, und die Zeit, jedes Array zählen? Z.B. Run1 - 23ms; Run2 - 25ms; ... Run100 - 22ms
EDIT: Ich habe noch eine letzte Sache zu tun. So wird jede Iteration die Array ein paar Möglichkeiten, sortiert, sagen wir mal Einfügung, merge und schnell sortieren. So sagt Einfügung = 300ms, merge = 200ms und schnell = 100ms. Ich muss für jede Iteration, herauszufinden, welche Methode die schnellste sortiert.
Ich weiß, das ist eine einfache Min- / Max-Typ, was Sie tausendmal in unteren Klassen Programmierung zu tun. Wäre es leichter, jeden Wert in ein Feld zu werfen und einen array.min Anruf benutzen? (Was auch immer es tatsächlich ist, neu in Java-Syntax ..)
Lösung
Zur Zeit sieht es aus wie Sie das Array erstellen und dann mit verschiedenen Funktionen immer wieder zu sortieren.
Sie müssen lediglich das alles in einer Schleife setzen.
int maxRuns = 100;
int maxSize = 100000; // array size
for (int run=0; run<maxRuns; run++) {
Sortarr arr, iniArr; // reference to array
arr = new Sortarr(maxSize); // create the array
iniArr = new Sortarr(maxSize);
// insert random numbers
Random generator = new Random();
for (int i = 0; i < maxSize; i++) iniArr.insert(generator.nextInt());
long insertionStart = System.currentTimeMillis();
arr.Clone(iniArr);
arr.insertionSort();
long insertionFinal = System.currentTimeMillis() - insertionStart;
/* <more code goes here> */
}
Sie können den Index run
verwenden, während die Ergebnisse ausdrucken.
Andere Tipps
Sie würden wahrscheinlich wie etwas tun:
for (int try = 0; try < 100; try++) {
iniArr = new Sortarr(maxSize);
// insert random numbers
Random generator = new Random();
for (int i = 0; i < maxSize; i++) iniArr.insert(generator.nextInt());
long insertionStart = System.currentTimeMillis();
arr.Clone(iniArr);
arr.insertionSort();
long insertionFinal = System.currentTimeMillis() - insertionStart;
// print out the time, and/or add up the total
}
Sie würden immer noch die Initialisierung vorher müssen. Ich glaube, ich weiß nicht, warum das Array geklont wird, bevor es sortiert wird. Können Sie direkt sortieren, dass Array?