2017-08-15 9 views
0

La fonction du tri d'insertion ne fonctionne pas. L'erreur est: Une fonction prend trop de temps à s'exécuter. Peut-être avez-vous une erreur dans votre code?Pourquoi mon code ne fonctionne pas? Insertion Tri

// this function 
var insert = function(array, rightIndex, value) { 
    for(var j = rightIndex; 
     j >= 0 && array[j] > value; 
     j--) 
    { 
     array[j + 1] = array[j]; 
    } 
    array[j + 1] = value; 
}; 

var insertionSort = function(array) { 
    for(var i = 0; i < array.length ; i++) 
    { 
     insert(array,i,array[i+1]); 
    } 
}; 

var array = [22, 11, 99, 88, 9, 7, 42]; 
insertionSort(array); 
println("Array after sorting: " + array); 
Program.assertEqual(array, [7, 9, 11, 22, 42, 88, 99]); 

Répondre

0

var insert = function(array, rightIndex, value) { 
 
    for(var j = rightIndex; 
 
     j >= 0 && array[j] > value; 
 
     j--) 
 
    { 
 
     array[j + 1] = array[j]; 
 
    } 
 
    array[j + 1] = value; 
 
}; 
 

 
var insertionSort = function(array) { 
 
    for(var i = 0; i < array.length - 1 ; i++) 
 
    { 
 
     insert(array,i,array[i+1]); 
 
    } 
 
}; 
 

 
var array = [22, 11, 99, 88, 9, 7, 42]; 
 
insertionSort(array); 
 
console.log(array);

vous devez exécuter votre boucle 1 moins itération que vous appelez la fonction insert() avec i + 1;

1

Votre problème est sur le choix de la position de tableau comme [i+1] et [j+1]

changement

var insert = function(array, rightIndex, value) { 
    for(var j = rightIndex; 
     j >= 0 && array[j] > value; 
     j--) 
    { 
     array[j + 1] = array[j]; 
    } 
    array[j + 1] = value; 
}; 

dans

var insert = function(array, rightIndex, value) { 
    for(var j = rightIndex; 
      j > 0 && array[j-1] > value; 
      j--) 
     { 
      array[j] = array[j-1]; 
     } 
     array[j] = value; 
    }; 

et

insert(array, i, array[i+1]); 

dans

insert(array, i, array[i]); 
+0

est peut-être la peine d'expliquer pourquoi ce changement est nécessaire. Comme personne ne va apprendre de cette réponse – Deckerz

+0

Par 'array [i + 1]' nous ne pouvons pas être sûrs s'il y a un élément i + 1' –

+0

La question est de définir la fonction insertionSort pas l'insert, change Error reste le même –

0

Essayez de passer par le tableau arrière dans la fonction InsertionSort:

var insertionSort = function(array) { 
    for (var i = array.length - 1; i >= 0; i--) { 
    insert(array,i,array[i+1]); 
    } 
};