为什么我的代码无法运行?插入排序

问题描述:

插入排序功能不起作用,错误是:函数运行时间太长。也许你的代码有错误?为什么我的代码无法运行?插入排序

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

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

,你应该为你与我+ 1调用插件()函数来运行你的循环少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]); 
+0

可能是值得解释为什么这种变化是必要的。由于没有人会从这个答案中学习 – Deckerz

+0

通过'array [i + 1]'我们不能确定是否存在'i + 1'元素 –

+0

问题是设置了插入函数insertSort而不是插入, 虽然在执行完这个更改错误保持不变 –

尝试通过阵列倒退的插入排序函数内部:

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