Javascript 实现Insert函数
我目前正在学习汗学院的算法课程,该课程使用JS教授基本算法。我目前正在实现插入排序,但发现了一个问题 我们正在编写一个函数,它接受数组、起始索引和值,以便在正确的顺序位置插入一个数字。我在这里写下了上述函数: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
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 ___;