实现插入功能

Implementing Insert Function

本文关键字:功能 插入 实现      更新时间:2023-09-26

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

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

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

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):看这里

来自挑战:

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

正在严格检查这一点:

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

无需返回数组,因为它是通过引用传递的。只需将每个元素向右移动 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; 
};

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

这已经奏效了:

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;