Javascript排序。分配失败进程内存不足错误
我的Javascript代码中出现错误“致命错误:调用和重试0分配失败-进程内存不足”。如何运行此代码?我看不到代码中有任何缺陷,因为我在Python中做的事情与在Python中完全相同,它在Python中工作,但在Javascript中我得到了内存错误。下面是我的代码Javascript排序。分配失败进程内存不足错误,javascript,memory-management,out-of-memory,quicksort,Javascript,Memory Management,Out Of Memory,Quicksort,我的Javascript代码中出现错误“致命错误:调用和重试0分配失败-进程内存不足”。如何运行此代码?我看不到代码中有任何缺陷,因为我在Python中做的事情与在Python中完全相同,它在Python中工作,但在Javascript中我得到了内存错误。下面是我的代码 var sample_arr = [-1, 5, 7, 4, 0, 1, -5] function My_Partition(container, first_index, last_index) {
var sample_arr = [-1, 5, 7, 4, 0, 1, -5]
function My_Partition(container, first_index, last_index) {
var x = container[last_index];
var i = first_index - 1;
for (var elem = 0; elem < container.length-1; elem++) {
if (container[elem] <= x) {
i += 1;
var temp_1 = container[i];
container[i] = container[elem];
container[elem] = temp_1;
}
}
var temp_2 = container[i+1];
container[i+1] = container[last_index];
container[last_index] = temp_2;
return i+1;
}
function My_Quick_Sort(container, first_index, last_index) {
if (first_index < last_index) {
var mid = My_Partition(container, first_index, last_index);
My_Quick_Sort(container, first_index, mid-1);
My_Quick_Sort(container, mid+1, last_index);
}
}
My_Quick_Sort(sample_arr, 0, sample_arr.length-1);
console.log("Sorted Array:", sample_arr);
var sample_arr=[-1,5,7,4,0,1,5]
函数My_分区(容器、第一个_索引、最后一个_索引){
var x=容器[最后的索引];
var i=第一个指数-1;
for(var elem=0;elem 如果(容器[elem],那是一场相当壮观的崩溃
因此,由于这看起来像是某种家庭作业/练习,而不是回答问题,让我们回答问题背后的问题:“我如何找出如何解决这样的问题?”最好的方法通常是提出一个理论,然后找到一种测试方法
理论1:堆栈溢出
通常,如果内存不足,一个明显的猜测是堆栈溢出。要尝试并测试这一点,让我们看看是否可以设置函数调用次数的限制,并在以下情况下运行:
哎呀!这仍然崩溃。我想这不是堆栈溢出,因为我们限制了调用这两个函数的次数
理论2:循环
让我们尝试另一种理论。也许发生的是一个无限循环。让我们记录循环调用(点击JSFIDLE)
请注意,它在循环中停留了100多次。对于一个简单的排序来说,这太多了。此时,您可能需要添加一个console.log调用并打印出局部变量。请尝试console.log(elem)或console.log(container.length),或者两者兼而有之。这是一个非常壮观的崩溃
因此,由于这看起来像是某种家庭作业/练习,而不是回答问题,让我们回答问题背后的问题:“我如何找出如何解决这样的问题?”最好的方法通常是提出一个理论,然后找到一种测试方法
理论1:堆栈溢出
通常,如果内存不足,一个明显的猜测是堆栈溢出。要尝试并测试这一点,让我们看看是否可以设置函数调用次数的限制,并在以下情况下运行:
哎呀!这仍然崩溃。我想这不是堆栈溢出,因为我们限制了调用这两个函数的次数
理论2:循环
让我们尝试另一种理论。也许发生的是一个无限循环。让我们记录循环调用(点击JSFIDLE)
请注意,它在循环中停留了100多次。对于简单排序来说,这太多了。此时,您可能需要添加一个console.log调用并打印出局部变量。请尝试console.log(elem)或console.log(container.length),或者两者兼而有之。通过这种排序,你想实现什么?我试图对一个混乱的数组进行排序,以获得一个排序的版本。通过这种排序,你想实现什么?我试图对一个混乱的数组进行排序,以获得一个排序的版本。非常感谢。我对Javascript非常陌生,这种错误我从未见过。所以Javascript无法处理这个问题rting?我想知道我是否可以用Javascript的方式解决这个问题,因为相同的代码在许多其他语言中都可以工作。我缺少什么?你能帮我吗?这不是家庭作业。我只是自学。非常感谢!在Python中你使用了len()对吗?在Python中尝试print()len(),然后尝试console.log()JavaScript中的container.length。你应该得到相同的数字,对吗?是吗?Console.log是你的朋友。看看这个版本,看看控制台:哦,很容易看出哪里出了问题。但仍在努力找出如何纠正错误。非常感谢!非常感谢。我对JavaScript和这种错误非常陌生我从来没有见过。所以Javascript不能处理这种排序?我想知道我是否可以用Javascript的方式解决这个问题,因为相同的代码在许多其他语言中都可以工作。我缺少什么?你能帮我吗?这不是家庭作业。我只是自学。非常感谢!在Python中你正在使用len()对吗?在Python中尝试print()len(),然后尝试console.log()JavaScript中的container.length。你应该得到相同的数字,对吗?是吗?Console.log是你的朋友。看看这个版本,看看控制台:哦,很容易看出哪里出了问题。但仍然在努力找出如何纠正错误。非常感谢!
var sample_arr = [-1, 5, 7, 4, 0, 1, -5];
var stop_running = 0;
function My_Partition(container, first_index, last_index) {
if (stop_running++ > 100) return;
...
}
function My_Quick_Sort(container, first_index, last_index) {
if (stop_running++ > 100) return;
...
}
My_Quick_Sort(sample_arr, 0, sample_arr.length-1);
console.log("Sorted Array:", sample_arr);