- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
这是我编写的代码:
function mergeSort(array){
if(array.length < 2) return array;
var mid = Math.floor(array.length / 2);
var left = array.slice(0, mid);
var right = array.slice(mid, array.length);
return merge(mergeSort(left), mergeSort(right));
}
function merge(left, right){
var result = [];
while (left.length && right.length){
if(left[0]>right[0]){
result.push(right[0]);
} else {
result.push(left[0]);
}
}
while(left.length){
result.push(left[0]);
}
while(right.length){
result.push(right[0]);
}
return result;
}
array = [1000, -94, -115, 300, 22]
mergeSort(array);
下面是我在网上找到的另一个解决方案
function mergeSort (arr) {
if (arr.length < 2) return arr;
var mid = Math.floor(arr.length /2);
return merge(mergeSort(arr.slice(0,mid)), mergeSort(arr.slice(mid)));
}
function merge (a,b) {
var result = [];
while (a.length >0 && b.length >0)
result.push(a[0] < b[0]? a.shift() : b.shift());
return result.concat(a.length? a : b);
}
var test = [-100,3,53,21,4,0];
console.log(mergeSort(test));
相比之下,除了一些语法之外,我找不到任何显着的差异。但由于某种原因,我的代码无法在 chrome 开发控制台和 node.js 环境中运行。在 chrome 中,它不会返回任何结果,在 node.js 中它给我
fatal error :CALL_AND_RETRY_LAST 分配失败 - 进程内存不足中止陷阱:6
有人可以帮助我理解实际产生差异的两个片段之间有什么区别吗?
提前致谢!
最佳答案
想一想,你有一个数组 left
并且你这样做了
while(left.length){
result.push(left[0]);
}
left[0]
不会更改数组,它只是获取第一项。
left
的长度将永远不会改变,只要数组的长度大于零,就会有一个 while 循环,而且它总是会改变,因为长度永远不会改变。
这是无限循环的完美示例,最终会填充调用堆栈并消除错误,或者在较旧的浏览器中只是崩溃。
但是如果你这样做
while(left.length){
result.push(left.shift());
}
Array.shift()
删除数组中的第一项,因此在某个时刻数组长度将为零,循环停止
关于javascript - JavaScript 中的归并排序算法和内存问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40576058/
本文实例汇总了Java各种排序算法。分享给大家供大家参考,具体如下: 1. 冒泡排序: ?
1.冒泡排序 它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。 算法步
前言 平时用惯了高级语言高级工具高级算法,难免对一些基础算法感到生疏。但最基础的排序算法中实则蕴含着相当丰富的优化思维,熟练运用可起到举一反三之功效。 选择排序 选择排序几乎是
我是一名优秀的程序员,十分优秀!