我认为我即将解决这个问题,但我不确定为什么我的代码没有正确执行。有人可以为我提供一些反馈,并告诉我哪里搞砸了吗?
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,,
答案 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 < 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;
};