尽管合并排序函数中有 2 return 条语句,但为什么只打印一条语句?
Why does only a single statement gets printed in spite of 2 return statement in merge sort function?
我想了解归并排序中的递归。
// 合并排序
var arr = [1,5,3,0];
function mergeSort(arr) {
if(arr.length == 1)
return arr;
if(arr.length > 1) {
let breakpoint = Math.ceil((arr.length/2));
// Left list starts with 0, breakpoint-1
let leftList = arr.slice(0,breakpoint);
// Right list starts with breakpoint, length-1
let rightList = arr.slice(breakpoint,arr.length);
// Make a recursive call
leftList = mergeSort(leftList);
rightList = mergeSort(rightList);
var a = merge(leftList,rightList);
return a;
}
}
function merge(leftList,rightList) {
let result = [];
while(leftList.length && rightList.length) {
if(leftList[0] <= rightList[0]) {
result.push(leftList.shift());
}else{
result.push(rightList.shift());
}
}
while(leftList.length)
result.push(leftList.shift());
while(rightList.length)
result.push(rightList.shift());
return result;
}
console.log(mergeSort(arr));
程序运行良好,但我不明白这里的递归。尽管有多个 return 语句,为什么程序只打印 :
[0,1,3,5]
如何打印结果,这里的递归是如何工作的?
程序只打印一次,因为整个逻辑流程只有一条输出语句:when mergeSort returns the final, sorted array to the main程序,该结果作为唯一的 console.log 调用的值返回。
请记住,return 将程序控制发送回调用该函数实例的位置。 merge 仅从 mergeSort 的底部调用。然而,mergeSort 从主程序和它自身的两个地方被调用。对于给定的示例,您有时会在堆栈的最深处有 three 个 mergeSort 实例。两个较高的将 return 到它们在 mergeSort 内的调用点;只有原来会return到主程序的log命令。
我想了解归并排序中的递归。 // 合并排序
var arr = [1,5,3,0];
function mergeSort(arr) {
if(arr.length == 1)
return arr;
if(arr.length > 1) {
let breakpoint = Math.ceil((arr.length/2));
// Left list starts with 0, breakpoint-1
let leftList = arr.slice(0,breakpoint);
// Right list starts with breakpoint, length-1
let rightList = arr.slice(breakpoint,arr.length);
// Make a recursive call
leftList = mergeSort(leftList);
rightList = mergeSort(rightList);
var a = merge(leftList,rightList);
return a;
}
}
function merge(leftList,rightList) {
let result = [];
while(leftList.length && rightList.length) {
if(leftList[0] <= rightList[0]) {
result.push(leftList.shift());
}else{
result.push(rightList.shift());
}
}
while(leftList.length)
result.push(leftList.shift());
while(rightList.length)
result.push(rightList.shift());
return result;
}
console.log(mergeSort(arr));
程序运行良好,但我不明白这里的递归。尽管有多个 return 语句,为什么程序只打印 :
[0,1,3,5]
如何打印结果,这里的递归是如何工作的?
程序只打印一次,因为整个逻辑流程只有一条输出语句:when mergeSort returns the final, sorted array to the main程序,该结果作为唯一的 console.log 调用的值返回。
请记住,return 将程序控制发送回调用该函数实例的位置。 merge 仅从 mergeSort 的底部调用。然而,mergeSort 从主程序和它自身的两个地方被调用。对于给定的示例,您有时会在堆栈的最深处有 three 个 mergeSort 实例。两个较高的将 return 到它们在 mergeSort 内的调用点;只有原来会return到主程序的log命令。