实现插入函数

时间:2014-11-19 12:07:49

标签: 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;
};

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

for(var ____ = _____; ____ >= ____; ____) {
    array[____+1] = ____;
}
____;

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

5 个答案:

答案 0 :(得分: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; 
};

顺便说一下,你不需要在for循环之前声明j(以后再使用)的原因是因为JavaScript没有块范围(TIL):See here < / p>

答案 1 :(得分:2)

来自challenge

  

尽管有很多编写此函数的方法,但您应以与提示代码一致的方式编写它。

严格检查此内容

var ___;
for(___ = ___; ___; ___) {
    array[___ + 1] = ___;
} 

因此,即使这两个候选项都是正确的:

while(array[rightIndex] > value && rightIndex >= 0) {
    array[rightIndex + 1] = array[rightIndex];
    rightIndex--;
}
array[rightIndex + 1] = value;

尤其是几乎相同的代码(在for循环中切换了中间语句):

for(var i = rightIndex; array[i] > value && i >= 0; i--) {
    array[i + 1] = array[i];
}

array[i + 1] = value;

这是答案:

for(var i = rightIndex; i >= 0 && array[i] > value; i--) {
    array[i + 1] = array[i];
}

array[i + 1] = value;

具有讽刺意味的是,它并不关心提示中无用的第一个变量...

var ___;

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

此处发布的大多数答案都是正确的。但它并没有让我们进入可汗学院的下一步。可能是因为Khan Academy期望某个变量名称,缩进设置等等。我不确定为什么它不能让我们进入下一步。

这段代码帮助我进入下一步:

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; 
};

在我发现这段代码之前,我使用i作为变量名而不是j,但它没有让我接下来的步骤。但这确实如此。

答案 4 :(得分:0)

这有效:

var insert = function(array,rightIndex,value){

var j = rightIndex;

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