2016-04-28 22 views
1

Aus irgendeinem Grund kann ich diesen Code nicht richtig sortieren. Ich ersetze die Bestellnummern, um eine geordnete Liste zu erstellen.Warum stoppt diese While-Schleife nicht?

var unsortedArray = new Array(1,2,5,4); 

    var sortedArray = unsortedArray; 
    var tempValue = 0; 

    function isSorted(array) 
    { 
     for (i = 0; i < array.length; i++) 
     { 
      if (array[i] > array[i+1]) 
      { 
       return false; 
      } 
     } 
     return true; 
    } 

    function sort(array) 
    { 



     while (isSorted(array) == false) 
     { 
      for (i = 0; i < length; i++) 
      { 
       var tempValue = array[i]; 

       array[i] = array[i+1]; 
       array[i+1] = tempValue; 
      } 
     } 
    } 

    sort(sortedArray); 

    document.write(sortedArray); 

Die hier while-Schleife soll, stoppen, wenn das Array sortiert ist, aber das kommt nie vor.

+0

Hypothese: Das Array ist nicht wie erwartet sortiert. – user2864740

+0

'für (i = 0; i

+0

Ihre Sortierung vergleicht die Elemente nicht, um zu sehen, ob sie ausgetauscht werden müssen. Es tauscht sie immer nur aus, egal ob sie es brauchen oder nicht. Das Array wird also nie in einen sortierten Zustand versetzt. – RJM

Antwort

2

Sie haben eine endlose Schleife, da dieser Code:

for (i = 0; i < length; i++) 
    { 
     var tempValue = array[i]; 

     array[i] = array[i+1]; 
     array[i+1] = tempValue; 
    } 

Hat ein Array nicht sortiert werden.

Warum nicht stattdessen die array.prototype.sort verwenden?

+0

Ich versuche, die Sortiermethode nicht zu verwenden, ich versuche, die Zahlen selbst zu sortieren. – Mineohmight

+0

Sie können eine Vergleichsfunktion mit Ihrer eigenen Logik hinzufügen, wie zum Beispiel 'arr.sort (function (a, b) {wenn (a> 12) return a; return b;}); ' –

1

Versuchen Sie dies, Es wird nur ein [n] Element ist weniger als ein [n-1] tauschen.

while (isSorted(array) == false) 
{ 
    for (i = 0; i < length-1; i++) 
    { 
     if(array[i]>array[i+1]){ 
      var tempValue = array[i]; 
      array[i] = array[i+1]; 
      array[i+1] = tempValue; 
     } 
} 

Es ändert sich auch die für die Schleife zu sein (var i = 0; i < Länge - 1; i ++). Andernfalls werden Sie am Ende des Arrays auf Array [Länge] zugreifen, das nicht definiert ist. (Zum Glück das wäre die Sortierung nicht beeinflussen, aber es ist besser, richtig sowieso zu sein.)

0
for (i = 0; i < length; i++) 
    { 
     var tempValue = array[i]; 

     array[i] = array[i+1]; 
     array[i+1] = tempValue; 
    } 

hier nie überprüfen, ob die adjascent Werte sortiert werden ..... ot der linke Wert größer als richtiger Wert .... (obwohl ich bin am überlegen Länge in der for-Schleife der Sortierfunktion Feldlänge sein)

Bewertung eine einfache Blase Art algo und dann versuchen .....

beziehen sich diese algo in C here