【发布时间】:2018-08-01 23:31:06
【问题描述】:
我正在学习可汗学院的算法课程。
我通常会尝试自己找出示例,但这次我真的不明白。练习在:Khan Academy Merge Sort Exercise.
所以我请一个好心的人为我解决这个练习,因为我被卡住了,这是我第一次无法实现某些东西。我确信我会在解决方案之后理解该算法(我想我会,但它在实现时给了我错误,所以显然我不理解)。
这是我到目前为止所做的代码:
// Takes in an array that has two sorted subarrays,
// from [p..q] and [q+1..r], and merges the array
var merge = function(array, p, q, r) {
// This code has been purposefully obfuscated,
// as you'll write it yourself in next challenge.
var a=[],b=[],c=p,d,e;for(d=0;c<=q;d++,c++){a[d]=array[c];}for(e=0;c<=r;e++,c++){b[e]=array[c];}c=p;for(e=d=0;d<a.length&&e<b.length;){if(a[d]<b[e]){array[c]=a[d];d++;} else {array[c]=b[e]; e++;}c++; }for(;d<a.length;){array[c]=a[d];d++;c++;}for(;e<b.length;){array[c]=b[e];e++;c++;}
};
// Takes in an array and recursively merge sorts it
var mergeSort = function(array, p, r) {
if(r > 1) {
var q = Math.floor((p + r) / 2);
mergeSort(array,p,q);
mergeSort(array,q+1,r);
merge(array, p, q, r);
}
};
var array = [14, 7, 3, 12, 9, 11, 6, 2];
console.log(''+array);
mergeSort(array, 0, array.length-1);
console.log("Array after sorting: " + array);
// Takes in an array that has two sorted subarrays,
// from [p..q] and [q+1..r], and merges the array
var merge = function(array, p, q, r) {
// This code has been purposefully obfuscated,
// as you'll write it yourself in next challenge.
var a=[],b=[],c=p,d,e;for(d=0;c<=q;d++,c++){a[d]=array[c];}for(e=0;c<=r;e++,c++){b[e]=array[c];}c=p;for(e=d=0;d<a.length&&e<b.length;){if(a[d]<b[e]){array[c]=a[d];d++;} else {array[c]=b[e]; e++;}c++; }for(;d<a.length;){array[c]=a[d];d++;c++;}for(;e<b.length;){array[c]=b[e];e++;c++;}
};
// Takes in an array and recursively merge sorts it
var mergeSort = function(array, p, r) {
if(r > 1) {
var q = Math.floor((p + r) / 2);
mergeSort(array,p,q);
mergeSort(array,q+1,r);
merge(array, p, q, r);
}
};
var array = [14, 7, 3, 12, 9, 11, 6, 2];
console.log(''+array);
mergeSort(array, 0, array.length-1);
console.log("Array after sorting: " + array);
【问题讨论】:
-
展示您的尝试而不是要求完整的解决方案怎么样?从你自己的代码中找到问题会比你复制粘贴一个现成的解决方案更有用。
-
@Teemu 我的尝试是我给你的代码
-
是吗?那么请使用有意义的变量名,这是成功的第一步。
-
这里的错误是什么?什么地方出了错?控制台中是否显示错误?你能隔离问题吗?您是否尝试过记录每个步骤?请不要指望人们会发现错误,为您修复它,然后进行相同的解释。
-
检查您的基本情况。递归需要什么时候结束?
p和r有什么值?
标签: javascript algorithm mergesort