Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 实现Insert函数_Javascript_Algorithm - Fatal编程技术网

Javascript 实现Insert函数

Javascript 实现Insert函数,javascript,algorithm,Javascript,Algorithm,我目前正在学习汗学院的算法课程,该课程使用JS教授基本算法。我目前正在实现插入排序,但发现了一个问题 我们正在编写一个函数,它接受数组、起始索引和值,以便在正确的顺序位置插入一个数字。我在这里写下了上述函数: var insert = function(array, rightIndex, value) { for (var i = rightIndex; array[i] >= value; i--) { array[i+1]=array[i]; array[i] = v

我目前正在学习汗学院的算法课程,该课程使用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] = ____;
}
____;

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

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

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

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

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):

这里发布的大多数答案都是正确的。但这并不能让我们进入汗学院的下一步。这可能是因为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,但这并没有让我进入下一步。但这确实有效。

这已经奏效了:

var insert=函数(数组、右索引、值){

从:

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

它正在严格地检查:

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; i >= 0 && array[i] > value; i--) {
    array[i + 1] = array[i];
}

array[i + 1] = value;
讽刺的是,它并不关心提示中无用的第一个变量

var ___;

我认为在那个网站上问这个问题更有意义。@Bergi我同意,但它不适合他的代码模板。我不认为这样的模板在任何方面都有用,因为总会有更好的解决方案不适合这样的模板。此外,不鼓励学生寻找其他解决方案。我认为
array[rightIndex]=value;
是错误的。您是@Felix,这是错误的。他一定是指
范围内的
数组[i]
for(var i = rightIndex; i >= 0 && array[i] > value; i--) {
    array[i + 1] = array[i];
}

array[i + 1] = value;
var ___;