在javascript中输入排序帮助 - 可汗学院

时间:2015-06-08 15:33:56

标签: javascript algorithm

我认为我即将解决这个问题,但我不确定为什么我的代码没有正确执行。有人可以为我提供一些反馈,并告诉我哪里搞砸了吗?

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 i = 1; i < array.length; i++){
        insert(array, array.length -1, i);
    }
};

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

如果我执行此操作insert(array, array[i], i);,我会得到以下输出:

Array after sorting: 22,11,12,100,89,10,8,43,5,,4,,1,,

4 个答案:

答案 0 :(得分:2)

I got here another solution for this insertion sort:


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 i = 0; i &lt; array.length-1; i++){
        insert(array, i, array[i+1]);
    }
};

var array = [22, 11, 99, 88, 9, 7, 42];
insertionSort(array);

答案 1 :(得分:1)

我认为你有一个问题:

insert(array, array.length -1, i);中的

应为insert(array, array.length -1, array[i]);

您正在插入数组索引而不是

你也有array[j + 1] = array[j];范围内的数组,因为j从array.length -1开始,array[j] = array[j-1];j>0

最后一件事:你的rightIndex应该是我在每次迭代时不是array.length -1

完整代码:

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

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

        };

        var array = [22, 11, 99, 88, 9, 7, 42];
        insertionSort(array);

答案 2 :(得分:0)

在插入排序中,我们将初始未排序的数组分成两部分;已排序的部分和未分类的部分。最初,已排序的部分只有一个元素(仅1个元素的数组是一个有序数组)。然后我们从未分类的部分逐个拾取元素;在正确的位置插入已排序的部分,并一次展开已排序的第一部分元素。

var a = [34, 203, 3, 746, 200, 984, 198, 764, 9];

function insertionSort(values) {
  var length = values.length;
  for(var i = 1; i < length; ++i) {
    var temp = values[i];
    var j = i - 1;
    for(; j >= 0 && values[j] > temp; --j) {
      values[j+1] = values[j];
    }
    values[j+1] = temp;
  }
};

console.log(a);
insertionSort(a);
console.log(a);

答案 3 :(得分:0)

我知道我在聚会上来得太晚了。你知道有几种方法可以做到这一点,但KA上的黄色生物显然希望我们以特定的方式做到这一点。以下是使其满意的解决方案:

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