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

时间:2015-08-31 13:27:26

标签: javascript insertion-sort khan-academy

我正在使用算法类Khan Academy for 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]);

现在我想知道这里有什么不对,我无法进入下一个级别...请帮助。 :)

5 个答案:

答案 0 :(得分:8)

全部:)这是正确的解决方案。你无法改变已经写好的内容。

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

答案 1 :(得分: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);

答案 2 :(得分:1)

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

在此特定问题上,右上角有一个“提示”部分。如果单击这是什么?链接。

  

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

在他们的提示中,他们希望初始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; 
};

答案 3 :(得分:0)

您的程序是正确的但可能是语法错误: 使用 Console.log(“排序后的数组:”+数组); 代替: println(“排序后的数组:”+数组); 在java Script中没有任何方法println用于输出。

答案 4 :(得分:-2)

这有效......

public class asdf{
  public static void main(){
    int arr[] = new int[5];
    System.out.println(arr);
  }
}