我目前正在使用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] = ____;
}
____;
有谁知道如何重复我的代码以符合这些标准?
答案 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;