Ich habe einen Sortieralgorithmus implementiert, und ich kann nicht herausfinden, wie lange es dauern würde, in schlechtesten, besten oder durchschnittlichen Fällen. Wie kann ich das angehen?Wie ermittle ich die Laufzeit dieses Algorithmus?
Eine visuelle Darstellung hier: https://plus.google.com/117480037533147789168/posts/FpgbKsyNLSL
public int[] shortingSort(int[]unsortedArray){
int k = 1;
for (int i = 0; i<Math.floor(unsortedArray.length/2); i++){
while(k != unsortedArray.length-1-i){
if(k!= i && unsortedArray[i]>unsortedArray[k]){
int sub = 0;
sub = unsortedArray[i];
unsortedArray[i] = unsortedArray[k];
unsortedArray[k] = sub;
}
if(k!= unsortedArray.length-1-i &&
unsortedArray[unsortedArray.length-1-i] < unsortedArray[k]){
int sub = 0;
sub = unsortedArray[unsortedArray.length-1-i];
unsortedArray[unsortedArray.length-1-i] = unsortedArray[k];
unsortedArray[k] = sub;
}
k++;
}
if(k == unsortedArray.length-1-i){
k = 1 + i;
}
}
return unsortedArray;
}
sieht aus wie ein 'n^2' Zeit mir Komplexität Algorithmus. Die äußere Schleife läuft in "n/2", während die innere Schleife in "n/2", "n/2 - 1", "n/2 - 2" läuft ... – Turing85
Könnten Sie mir erklären, warum der innere? ist n/2, n/2 - 1, n/2 - 2 ... und so weiter? –
Oh Entschuldigung, es läuft in 'n/2',' n/2 - 2', 'n/2 - 4',' n/2 - 6' ... Für jede Iteration der äußeren Schleife, 'i' wird um eins erhöht. Die innere Schleife läuft, während 'k! = N - 1 - i'. Die Variable "k" wird nur um "1" inkrementiert, somit hat "k" den Wert "n - 1 - i" nach der inneren Schleife (macht das "if" überflüssig), und "k" wird auf "i + 1" gesetzt . Daher macht die nächste innere Schleife zwei Iterationen weniger als die aktuelle Iteration. Dies führt zu den Summanden: "n/2 + (n/2 - 2) + (n/2 - 4) + (n/2 - 6) + ... + 2", was zu einem "n^2" führt Zeitkomplexitätsalgorithmus. – Turing85