[英]Why my code doesn't run ? Insertion Sort
Function of insertion sort is not working, Error is : A function is taking too long to run. 插入排序功能不起作用,错误是: 函数运行时间太长。 Perhaps you have a mistake in your code?
也许您的代码有误?
// 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]);
Your problem is on choosing array position as [i+1]
and [j+1]
您的问题是选择数组位置为
[i+1]
和[j+1]
change 更改
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;
};
into 成
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;
};
and 和
insert(array, i, array[i+1]);
into 成
insert(array, i, array[i]);
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);
you should run your loop 1 less iteration as you are calling the insert() function with i + 1; 您应该使用i +1调用insert()函数,从而减少循环1次迭代;
Try going through the array backwards inside the insertionSort function: 尝试在insertSort函数内部向后遍历数组:
var insertionSort = function(array) {
for (var i = array.length - 1; i >= 0; i--) {
insert(array,i,array[i+1]);
}
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.