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

Khan Academy - Challenge: Implement insertion sort

本文关键字:实现 插入排序 挑战      更新时间:2023-09-26

我正在可汗学院学习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]);

现在我想知道这里出了什么问题,我不能进入下一关…请帮助。:)

to all:)这是正确的解决方案。你不能改变已经写好的东西。

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

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

this works…

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