2016-04-28 3 views
1

Pour une raison quelconque, je ne peux pas obtenir ce code pour trier correctement. Je remplace les numéros de commande afin de faire une liste ordonnée.Pourquoi cette boucle while ne s'arrête-t-elle pas?

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); 

La boucle while ici est censé arrêter lorsque le tableau est trié, mais qui ne se produit jamais.

+0

Hypothèse: le tableau n'est pas trié comme prévu. – user2864740

+0

'pour (i = 0; i

+0

Votre sorte ne compare pas les éléments pour voir s'ils doivent être échangés. Il les échange toujours, qu'ils en aient besoin ou non. Ainsi, le tableau ne passe jamais dans un état trié. – RJM

Répondre

2

Vous avez une boucle sans fin puisque ce code:

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

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

ne trie pas un tableau.

Pourquoi ne pas utiliser le array.prototype.sort à la place?

+0

J'essaie de ne pas utiliser la méthode de tri, j'essaie de faire ma propre façon de trier les nombres. – Mineohmight

+0

Vous pouvez ajouter une fonction de comparaison avec votre propre logique comme ceci: arr.sort (fonction (a, b) {if (a> 12) renvoie a; return b;}); ' –

1

Essayez ceci, Il permutera seulement un élément [n] est inférieur à un [n-1].

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; 
     } 
} 

Il modifie également la boucle pour être for (var i = 0; i < longueur - 1; i ++). Sinon, à la fin du tableau, vous accéderez à array [length] qui ne sera pas défini. (Heureusement, ce ne serait pas une incidence sur le tri, mais il vaut mieux être bon en tout cas.)

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

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

ici vous ne vérifiez si les valeurs de adjascent sont classés ..... ot la valeur de gauche est supérieure à la valeur droite .... (bien que j'envisage la longueur dans la boucle de la fonction de tri pour être la longueur du tableau)

examen d'un simple tri à bulles algo puis essayer .....

Envoyer cette algo en C here