为了做到这一点,插入功能需要通过向右移动大于值的项来腾出空间。它应该从rightIndex开始,当它找到一个小于或等于value的项时,或者当它到达数组的开头时停止。一旦函数为值提供了空间,它就可以将值写入数组。
var insert = function(array, rightIndex, value) {
var key = value;
for(var i = rightIndex; array[i] > value ; i = i - 1)
{
array[rightIndex + 1] = array[rightIndex];
}
array[i+1] = value;
};
为什么输入这个数组后我的这个功能无法正常工作!
var array = [3, 5, 7, 11, 13, 2, 9, 6];
它显示了这个结果:
insert(array, 4, 2);
2,5,7,11,13,13,9,6
答案 0 :(得分:3)
更改当前显示的行:
array[rightIndex + 1] = array[rightIndex];
如下:
array[i + 1] = array[i];
在您当前编写的代码中,rightIndex
项将被重复粘贴到rightIndex+1
'位置。这就是您在结果中获得两个13
的原因。
所以你的代码已经差不多了!
您可以更改for循环,以确保您永远不会离开数组的开头。
for(var i = rightIndex; i>=0 && array[i] > value ; i = i - 1)
插入i>=0 &&
意味着当i
低于0时,Javascript知道结束循环。否则,它将尝试读取未定义的元素array[-1]
。幸运的是,测试仍然有效,因为任何数字(甚至是负数)与“未定义”的比较都是错误的。但是明确测试这个而不是依赖于语言的怪癖是更好的风格。原因是如果您使用其他语言应用相同的算法,array[-1]
可能是错误。
答案 1 :(得分:0)
将值插入数组可以正常使用已排序的数组,在这种情况下,您的数组不会被排序。
var array = [3, 5, 7, 11, 13, 2, 9, 6];
你需要先对数组进行排序,为此使用
var array = [3, 5, 7, 11, 13, 2, 9, 6];
array = arra.sort(function (a, b) { return a - b; });
array = array.sort((a, b) => a - b);
//outputs: 2, 3, 5, 6 , 7, 9, 11, 13
然后你可以按照排序
插入这个数组为此你可以试试这样的东西
var array = [2, 3, 5, 6 , 7, 9, 11, 13];
var element = 2;
function insert(element, array) {
array.push(element);
array.sort(function(a, b) {
return a - b;
});
return array;
}
//outputs: 2, 2, 3, 5, 6 , 7, 9, 11, 13