2017-07-02 3 views
0

Schleife "i" muss brechen, wenn if-Anweisung der Schleife "j" swap = false zurückgeben, aber es tut das nicht und durch alle von arr.lengthJavaScript Blasensortierung Änderung (Bedingung der Schleife "für" funktioniert nicht)

bubble sort pen link

var arr = [0, 1, 2, 4, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13]; 
var n = arr.length; 
var t; 
var swap; 

for (var i = 0; (i < n) && (swap = true); i++) { 
for (var j = 0; j < (n - (i + 1)); j++) { 


    if (arr[j] > arr[j + 1]) { 

     t = arr[j + 1]; 
     arr[j + 1] = arr[j]; 
     arr[j] = t; 
     swap = true; 

    } else { swap = false } 
} 
}; 

Antwort

0

diese Linie

for (var i = 0; (i < n) && (swap = true); i++) { 

Wert zuweist zu tauschen (dh Swap = true), während Sie tatsächlich überprüfen sein Wert (.ie tauschen === wahr).

Beachten Sie, dass Swap zunächst undefiniert ist. Wenn Sie also Ihren Code in Übereinstimmung mit dem obigen ändern (swap === true), sollten Sie ihn vor dem Eintritt in die Schleife explizit auf true setzen.

+0

Danke, Ihre Antwort ist korrekt und hilfreich für meine Idee mit der Schleife "i". aber meine Idee war falsch. Und diese Überprüfung funktioniert nicht mit allen möglichen Werten des Arrays. In manchen Fällen erfolgt keine Sortierung. zum Beispiel 'var arr = [11, 12, 0, 1, 2, 4, 3, 5, 6, 7, 8, 9, 10, 13]; –

0

können Sie die Pause nutzen; Anweisung zum Anhalten der für() Schleife Have a look here

var arr = [0, 1, 2, 4, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13]; 
 
var n = arr.length; 
 
var t; 
 
var swap = true; 
 

 
for (var i = 0; i < n; i++) { \t 
 
\t if (!swap) { 
 
\t \t break; 
 
\t } 
 
\t for (var j = 0; j < (n - (i + 1)); j++) { 
 
\t \t if (arr[j] > arr[j + 1]) { 
 
\t \t \t t = arr[j + 1]; 
 
\t \t \t arr[j + 1] = arr[j]; 
 
\t \t \t arr[j] = t; 
 
\t \t } else { 
 
\t \t \t swap = false; 
 
\t \t } 
 
\t } 
 
}; 
 
alert(performance.now()); 
 
alert(arr);

+0

danke, aber warum funktioniert mein Code nicht? wo mein Fehler? Ich brauche meine Schleife "i" beendet, wenn die Sortierung erfolgt –

+0

Sorry, ich habe nur ein Beispiel, um Ihnen zu helfen, Änderungen: - setzen Sie Swap auf True - Test von Swap in der for() -Anweisung - Test-Swap innerhalb der Schleife, um es zu brechen, wenn Swap false –

+0

Ein anderer Schnitt, entferne ich die Pause; von der zweiten Schleife –

0

correct answer by duncan smith

diese Linie

for (var i = 0; (i < n) && (swap = true); i++) { 

weist einen Wert (d Swap = true) zu tauschen, während Sie tatsächlich seinen Wert überprüfen möchten (.i.e. Swap === true).

Beachten Sie, dass Swap zunächst undefiniert ist. Wenn Sie also Ihren Code in Übereinstimmung mit dem obigen ändern (swap === true), sollten Sie ihn vor dem Eintritt in die Schleife explizit auf true setzen.

Verwandte Themen