插入排序功能错误

时间:2017-08-15 05:36:26

标签: javascript arrays insertion-sort

为了做到这一点,插入功能需要通过向右移动大于值的项来腾出空间。它应该从rightIndex开始,当它找到一个小于或等于value的项时,或者当它到达数组的开头时停止。一旦函数为值提供了空间,它就可以将值写入数组。

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

为什么输入这个数组后我的这个功能无法正常工作!

var array = [3, 5, 7, 11, 13, 2, 9, 6];

它显示了这个结果:

insert(array, 4, 2);

2,5,7,11,13,13,9,6

2 个答案:

答案 0 :(得分:3)

将项目向右移动的行需要编辑

更改当前显示的行:

array[rightIndex + 1] = array[rightIndex];

如下:

array[i + 1] = array[i];

在您当前编写的代码中,rightIndex项将被重复粘贴到rightIndex+1'位置。这就是您在结果中获得两个13的原因。

所以你的代码已经差不多了!

明确检查数组的开头

您可以更改for循环,以确保您永远不会离开数组的开头。

for(var i = rightIndex; i>=0 && array[i] > value ; i = i - 1)

插入i>=0 &&意味着当i低于0时,Javascript知道结束循环。否则,它将尝试读取未定义的元素array[-1]。幸运的是,测试仍然有效,因为任何数字(甚至是负数)与“未定义”的比较都是错误的。但是明确测试这个而不是依赖于语言的怪癖是​​更好的风格。原因是如果您使用其他语言应用相同的算法,array[-1]可能是错误。

答案 1 :(得分:0)

将值插入数组可以正常使用已排序的数组,在这种情况下,您的数组不会被排序。

var array = [3, 5, 7, 11, 13, 2, 9, 6];

你需要先对数组进行排序,为此使用

var array = [3, 5, 7, 11, 13, 2, 9, 6];

array = arra.sort(function (a, b) {  return a - b;  });

array = array.sort((a, b) => a - b);

//outputs:  2, 3, 5, 6 , 7, 9, 11, 13

然后你可以按照排序

插入这个数组

为此你可以试试这样的东西

var array = [2, 3, 5, 6 , 7, 9, 11, 13];
var element = 2;

function insert(element, array) {
   array.push(element);

   array.sort(function(a, b) {
       return a - b;
   });

   return array;
}


//outputs:  2, 2, 3, 5, 6 , 7, 9, 11, 13