javascript - 插入排序函数错误

标签 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

最佳答案

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

更改当前显示的行:

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] 可能会出错。

关于javascript - 插入排序函数错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45687013/

相关文章:

javascript - jQuery 获取 Sibillings 第一个 child 的名称属性

javascript - 如何使用 javascript 更改背景图像及其属性

javascript - Array.length 在 for 循环中未产生预期结果

sorting - 为什么反转的分布在插入排序中不重要?

c - C 中的二分查找有缺陷

javascript - 浏览器有可能不兼容JQuery吗?

javascript - 如何创建一个单击时改变视觉效果的按钮?

javascript - 在javascript中推送json数组

arrays - Dart 。不能'改变列表的元素

c++ - T Cormen Book 中的插入排序