为什么我的代码无法运行?插入排序
问题描述:
插入排序功能不起作用,错误是:函数运行时间太长。也许你的代码有错误?为什么我的代码无法运行?插入排序
// 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]);
答
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);
,你应该为你与我+ 1调用插件()函数来运行你的循环少1次迭代;
答
你的问题是选择为[i+1]
阵列位置和[j+1]
变化
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 insert = function(array, rightIndex, value) {
for(var j = rightIndex;
j > 0 && array[j-1] > value;
j--)
{
array[j] = array[j-1];
}
array[j] = value;
};
和
insert(array, i, array[i+1]);
到
insert(array, i, array[i]);
答
尝试通过阵列倒退的插入排序函数内部:
var insertionSort = function(array) {
for (var i = array.length - 1; i >= 0; i--) {
insert(array,i,array[i+1]);
}
};
可能是值得解释为什么这种变化是必要的。由于没有人会从这个答案中学习 – Deckerz
通过'array [i + 1]'我们不能确定是否存在'i + 1'元素 –
问题是设置了插入函数insertSort而不是插入, 虽然在执行完这个更改错误保持不变 –