可汗学院 - 挑战:实施插入排序

Khan Academy - Challenge: Implement insertion sort

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

 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]);

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

你的程序是正确的,但可能是语法错误: 使用 Console.log("Array after sorting: " + 数组); 代替: println("Array after sorting: " + 数组); 在 java 脚本中没有任何用于输出的方法 println。

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

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

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]);

这有效...

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

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

关于这个特定问题,右上角有一个 "hint" 部分。如果您单击 这是什么? link。

This hint shows the code you'll need to successfully complete this step, but it is not the complete answer. The empty blanks are parts that you will need to figure out yourself. If you see colored blanks, the values you put in two blanks of the same color must be exactly the same

在他们的暗示中,他们希望对初始变量、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; 
};