2017-06-23 1 views
-1

Ich versuche herauszufinden, die beste Zeit Komplexität während der Überprüfung, ob das angegebene Array unsortiert ist.Best-Case-Zeit Komplexität, um zu überprüfen, ob das Array unsortiert ist

Ich denke, dies ist der schnellste Weg zu überprüfen, ob Array sortiert oder unsortiert ist und die Zeit Komplexität sollte O (n) für diese sein.

for (i = 0; i < a.length-1; i++) { 
    if (a[i] < a[i + 1]) { 
    return true; 
    } else { 
    return false; 
    } 
} 

Oder bin ich falsch?

+0

Nur dies wird wahrscheinlich einen Fehler verursachen, wenn Sie versuchen, auf a [i + 1] 'für das _letzte_Arrayelement zuzugreifen ... die Schleife sollte nur für' i CBroe

+2

Ihr Code berücksichtigt die korrekten Array-Grenzen nicht (Bedingung sollte' i + 1 clemens

+0

@CBroe Der Code _would_ out of bounds (UB) für 'a [i + 1]' aber es wird nie über die erste Iteration hinauskommen. –

Antwort

2

Ja, das dauert O(n), und es ist as fast as it gets.


Darüber hinaus müssen Sie dies ändern:

for (i = 0; i < a.length; i++) 

dazu:

for (i = 0; i < a.length - 1; i++) 

da Sie a[i + 1 zugreifen, und Sie wollen nicht außerhalb der Grenzen zu gehen. Außerdem sollten Ihre Return-Statements getauscht werden.

+0

Das wäre besser: 'für (i = 0; i + 1 DAle

+0

Warum @DAle? Bitte erkläre. – gsamaras

+0

Um mögliche unendliche Schleife in dem Fall zu vermeiden, wenn 'a.length == 0' – DAle

Verwandte Themen