function newsort(array) {
if (array.length <= 1) {
alert(array);
} else {
mid = array.length / 2;
left = [];
right = [];
for (i = 0; i < mid; i++) {
left.push(array[i]);
}
for (i = mid; i <= array.length; i++) {
right.push(array[i]);
}
}
result = merge(left, right);
alert(result);
};
function merge(left, right) {
alert(left);
}
function merge(arr1, arr2) {
var arr3 = [];
while (arr1.length > 0 && arr2.length > 0) {
if (arr1[0] <= arr2[0]) {
arr3.push(arr1.shift());
} else {
arr3.push(arr2.shift());
}
}
while (arr1.length > 0) {
arr3.push(arr1.shift());
}
while (arr2.length > 0) {
arr3.push(arr2.shift());
}
// time = timeSortingAlgorithm(arr3, newsort(array));
// return time;
return arr3;
};
function makeRandomArray(size) {
var result = Array();
while (size > 0) {
result.push(Math.floor(Math.random() * 100000));
--size;
}
return result;
}
function timeSortingAlgorithm(array, sortingAlgorithm) {
var startTime = new Date();
newsort(array);
var endTime = new Date();
return endTime.getTime() - startTime.getTime();
}
var array = makeRandomArray(6);
newsort(array);
//timeSortingAlgorithm(array,newsort);
当我运行这段代码时,我的想法是它会将函数merge合并并将数组的两半发送到newsort - 然后将它们合并在一起进行排序。该数组由makeRandomArray函数创建。但是,我无法弄清楚如何合并timeSortingAlgorithm(array,sortingAlgorithm)函数,就像我调用它一样 - 没有任何反应。我现在已经将这些电话注释掉了,但是当我把它们拿出来时 - 根本没有输出。如果我完全退出该功能 - 一切正常。
任何人都能指出我正确的方向吗?
答案 0 :(得分:1)
三是您实施的主要问题。
除此之外,我能找到的问题是
您使用的是全局变量,mid
,left
和right
是全局变量。
您无法从newsort
函数返回已排序的数组。
您定义了两个合并功能。
您的mid
应该是一个整数,因为您使用它来索引数组,并且会为浮点数返回undefined
。
所以,固定的实现看起来像这样
function newsort(array) {
if (array.length <= 1) {
return array;
} else {
var mid = parseInt(array.length / 2), left = [], right = [];
for (var i = 0; i < mid; i++) {
left.push(array[i]);
}
for (i = mid; i < array.length; i++) {
right.push(array[i]);
}
}
return merge(newsort(left), newsort(right));
};
function merge(arr1, arr2) {
var arr3 = [];
while (arr1.length > 0 && arr2.length > 0) {
if (arr1[0] <= arr2[0]) {
arr3.push(arr1.shift());
} else {
arr3.push(arr2.shift());
}
}
while (arr1.length > 0) {
arr3.push(arr1.shift());
}
while (arr2.length > 0) {
arr3.push(arr2.shift());
}
return arr3;
};
function timeSortingAlgorithm(array, sortingAlgorithm) {
var startTime = new Date(), result = sortingAlgorithm(array);
console.log(new Date().getMilliseconds() - startTime.getMilliseconds());
return result;
}
var array = makeRandomArray(6);
console.log(array);
console.log(timeSortingAlgorithm(array, newsort));
答案 1 :(得分:0)
你有一个无限循环。
当你运行这一行时:
time = timeSortingAlgorithm(arr3, newsort(array));
您致电newsort
。
newsort
调用函数merge
然后运行,猜猜是什么,这一行:
time = timeSortingAlgorithm(arr3, newsort(array));