实现插入函数

dlb*_*b24 6 javascript algorithm

我目前正在使用Khan Academy的算法课程,该课程使用JS来教授基本算法.我目前正在实施插入排序,但发现了一个问题.

我们正在编写一个函数,它接受一个数组,索引从起始和值,以便在正确的有序位置插入一个数字.我在这里写了这个函数:

var insert = function(array, rightIndex, value) {
for (var i = rightIndex; array[i] >= value; i--) {
    array[i+1]=array[i];
    array[i] = value;
}
return array;
};
Run Code Online (Sandbox Code Playgroud)

这样工作正常,并按预期执行,但它没有通过KA的自动标记系统.他们给出了代码指南,并建议如下:

for(var ____ = _____; ____ >= ____; ____) {
    array[____+1] = ____;
}
____;
Run Code Online (Sandbox Code Playgroud)

有谁知道如何重复我的代码以符合这些标准?

Aar*_*ron 5

我有一个与您类似的解决方案,并且没有通过他们的自动化测试。如果您稍后查看“挑战:实现插入排序”,它们实际上会继续为您实现该功能:

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; 
};
Run Code Online (Sandbox Code Playgroud)

顺便说一句,您不需要在for循环之前声明j(稍后使用)的原因是因为JavaScript没有块作用域(TIL):请参见此处


小智 1

无需返回数组,因为它是通过引用传递的。只需将每个元素向右移动 1 即可。最后一条语句只是将值插入到正确的位置。

var insert = function(array, rightIndex, value) {
    for (var i = rightIndex; array[i] >= value; i--) {
        array[i+1] = array[i];
    }
   array[rightIndex] = value;
};
Run Code Online (Sandbox Code Playgroud)