javascript - 当条件评估为真时,JavaScript while 循环被跳过
问题描述
正如标题所说...我练习了创建合并排序功能。似乎合并函数只是跳过了第二个或第三个 while 循环(如果其中一个数组为空,则添加其余数字)。
ri < ri.length 条件被评估为真,但 while 循环被跳过。
function mergeSort(array) {
console.log("Array length", array.length);
if (array.length === 1)
return array;
const middle = Math.floor(array.length / 2);
const right = array.slice(middle, array.length);
const left = array.slice(0, middle);
let leftSorted = mergeSort(left);
let rightSorted = mergeSort(right);
let merged = merge(leftSorted, rightSorted);
return merged;
}
function merge(left, right) {
let ret = [];
let li = 0,
ri = 0;
console.log("leftLength", left.length, "rightlength", right.length);
while (li < left.length && ri < right.length) {
console.log("li", li, "ri", ri)
console.log("left[li]", left[li], "right[ri]", right[ri])
if (left[li] < right[ri]) {
console.log("pushing from left");
ret.push(left[li]);
li++;
} else {
console.log("pushing from right");
ret.push(right[ri]);
ri++;
}
}
console.log("li", li, "leftLength", left.length, li < left.length);
while (li < left.length) {
console.log("pushing from left");
ret.push(left[li]);
li++;
}
console.log("ri", ri, "rightLength", right.length, ri < right.length);
while (ri < right.length) {
console.log("pushing from right");
ret.push(right[ri]);
ri = ri + 1;
}
return ret;
}
const list = [2, 5, 1, 3, 7, 2, 3, 8, 6, 3]
console.log(mergeSort(list)) // [ 1, 2, 2, 3, 3, 3, 5, 6, 7, 8 ]
解决方案
您的 while 条件有一个错字:lenght
tolength
推荐阅读
- angular - 在 angular5 应用中显示通知
- angularjs - 无法使用访问令牌和 ng-file-upload 从 AngularJS 向服务器发送文件
- r - R:计算字符串中的连续字母
- android - UsageStatsManager 的每日间隔错误
- algorithm - 并行线性搜索 O(1) 吗?
- powershell - 指定日期范围内没有用户的用户会话数据
- mysql - 在更新查询中排序
- php - 在 PHP 中使用带有变量名的 GET 和 POST 数组
- vba - 根据另一个单元格的值锁定某些单元格
- java - Java 7 NIO2 Files.walk NotDirectoryException