我正在用JavaScript编写插入排序算法。
但我有一个小错误,如下:
function insertionSort(arrayOfNumbers) {
var j, key, i, length
for (j = 1, length = arrayOfNumbers.length; j < length; j++) {
key = arrayOfNumbers[j]
i = j - 1
while (i >= 0 && arrayOfNumbers[i] > key) {
arrayOfNumbers[i + 1] = arrayOfNumbers[i];
i = i - 1
}
arrayOfNumbers[i + 1] = key
}
return arrayOfNumbers
}
alert(insertionSort([2, 1, 5, 8, 9]))
&#13;
我已经编写了算法的伪代码版本,如下所示:
for j <- 2 to n
do key <- A[ j ]
i <- j - 1
while i > 0 and A[ i ] > key
do A[ i + 1 ] <- A[ i ]
i <- i - 1
A[ i + 1 ] <- key
你能发现我的错误吗?
答案 0 :(得分:2)
do .. while
不等同于伪代码 WHILE .. DO .. 。您还需要将算法调整为基于零的索引(您这样做了,但只是部分索引)。
见修复:
function insertionSort(arrayOfNumbers) {
var j, key, i, length
for (j = 1, length = arrayOfNumbers.length; j < length; j++) {
key = arrayOfNumbers[j]
i = j - 1
while (i >= 0 && arrayOfNumbers[i] > key){
arrayOfNumbers[i + 1] = arrayOfNumbers[i];
i = i - 1
}
arrayOfNumbers[i + 1] = key
}
return arrayOfNumbers
}
var result = insertionSort([2, 1, 5, 8, 9]);
console.log(result);
&#13;
答案 1 :(得分:0)
key = arrayOfNumbers[j]
i = j - 1
do {
arrayOfNumbers[i + 1] = arrayOfNumbers[i];
i = i - 1
} while (i > 0 && arrayOfNumbers[i] > key)
arrayOfNumbers[i + 1] = key
从元素1(为1)开始,i设置为0。 然后无条件地将元素0移到元素1并将键(旧元素1)插入元素0。
在下一次迭代中,您无条件地将元素1(现在是2)移位到元素2,依此类推。