-6

我正在学习 JavaScript 的算法课程可汗学院。我写了这样的代码:

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

    var insertionSort = function(array) {
    for (var st = 1; st < array.length; st++) {
        insert(array, st, array[st]);
    }
    };

    var array = [22, 11, 99, 88, 9, 7, 42];
    insertionSort(array);
    println("Array after sorting:  " + array);
    Program.assertEqual(array, [7, 9, 11, 22, 42, 88, 99]);

现在我想知道这里出了什么问题,我无法进入下一个级别......请帮助。:)

4

5 回答 5

11

对所有人:) 这是正确的解决方案。您无法更改已写入的内容。

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; 
};
var insertionSort = function(array) {
for (var st = 1; st < array.length; st++) {
    insert(array, st - 1, array[st]);
}
};
var array = [22, 11, 99, 88, 9, 7, 42];
insertionSort(array);
println("Array after sorting:  " + array);
Program.assertEqual(array, [7, 9, 11, 22, 42, 88, 99]);
于 2015-08-31T18:56:57.930 回答
2

问题不在于您给出了错误的答案,而在于您没有给出他们期望的编码解决方案。

在这个特殊问题上,右上角有一个“提示”部分。如果你点击这是什么?关联。

此提示显示成功完成此步骤所需的代码,但这不是完整的答案。空白是您需要自己弄清楚的部分。 如果您看到彩色空白,则您在两个相同颜色的空白中输入的值必须完全相同

在他们的提示中,他们期望初始 var、for 循环和数组使用相同的值。示例:替换 foo。

var foo;
for(foo = -----; -----; ----){
    array[foo + 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; 
};
于 2019-09-08T15:55:45.597 回答
1
var insertionSort = function (unsortedList) {
  var len = unsortedList.length;

  for(var i = 0; i < len; i++) {
    var tmp = unsortedList[i]; //Copy of the current element.
    /*Check through the sorted part and compare with the 
    number in tmp. If large, shift the number*/
    for(var j = i - 1; j >= 0 && (unsortedList[j] > tmp); j--) {
      //Shift the number
      unsortedList[j+1] = unsortedList[j];
    }
    //Insert the copied number at the correct position
    //in sorted part.
    unsortedList[j+1] = tmp;
  }
};
var array = [22, 11, 99, 88, 9, 7, 42];
insertionSort(array);
println("Array after sorting:  " + array);
于 2015-08-31T14:09:08.443 回答
0

您的程序是正确的,但可能是语法错误:use Console.log("Array after sort: " + array); 而不是: println("排序后的数组:" + array); 在 java Script 中没有任何方法 println 用于输出。

于 2015-08-31T13:35:43.767 回答
-1

这行得通...

var insert = function(array, rightIndex, value) {
    for (var i = rightIndex; i>=0 && array[i] > value; i --) {
        array[i+1] = array[i];
        }
    array[i+1] = value;
};   
于 2015-12-05T03:46:58.350 回答