【问题标题】:Why my code doesn't run ? Insertion Sort为什么我的代码不运行?插入排序
【发布时间】:2017-08-15 10:16:32
【问题描述】:

插入排序功能不起作用,错误是:函数运行时间过长。也许您的代码有错误?

// this function
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 < array.length ; i++)
    {
        insert(array,i,array[i+1]);
    }
};

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

【问题讨论】:

    标签: javascript arrays insertion-sort


    【解决方案1】:

    您的问题是选择数组位置为[i+1][j+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 insert = function(array, rightIndex, value) {
        for(var j = rightIndex;
                j > 0 && array[j-1] > value;
                j--) 
            {
                array[j] = array[j-1];
            }   
            array[j] = value; 
        };
    

     insert(array, i, array[i+1]);
    

    进入

     insert(array, i, array[i]);
    

    【讨论】:

    • 也许值得解释一下为什么这个改变是必要的。因为没有人会从这个答案中学到东西
    • 通过array[i+1],我们无法确定是否有i+1th 元素
    • 问题是设置insertionSort函数而不是insert,虽然在实现这个改变之后Error保持不变
    【解决方案2】:

    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 < array.length - 1 ; i++)
        {
            insert(array,i,array[i+1]);
        }
    };
    
    var array = [22, 11, 99, 88, 9, 7, 42];
    insertionSort(array);
    console.log(array);

    当您使用 i + 1 调用 insert() 函数时,您应该少运行 1 次循环;

    【讨论】:

      【解决方案3】:

      尝试在插入排序函数中向后遍历数组:

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

      【讨论】:

        猜你喜欢
        • 2023-04-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-05-13
        • 1970-01-01
        • 2017-01-18
        • 2016-02-18
        • 1970-01-01
        相关资源
        最近更新 更多