2014-04-08 56 views
0
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); 

当我运行这段代码时,它的想法是将函数合并并将数组的两半发送给newsort--然后将它们合并在一起,排序。该数组由makeRandomArray函数创建。但是,我无法弄清楚如何结合timeSortingAlgorithm(array,sortingAlgorithm)函数,就像我称之为 - 没有任何反应。目前我的电话已被注释掉,但是当我把它们拿出来时 - 根本没有输出。如果我完全不把这个功能放在这个过程中 - 一切正常。Javascript函数的功能

任何人都能指出我正确的方向吗?

+0

是否有在控制台中的任何错误? – forgivenson

+0

不,但我正在使用aptana ......所以就是这样。 – user3371104

+0

aptana!==浏览器控制台 – epascarello

回答

0

你有一个无限循环。

当您运行此行:

time = timeSortingAlgorithm(arr3, newsort(array)); 

你叫newsort

newsort通话功能merge,然后跑过来,你猜怎么着,这条线:

time = timeSortingAlgorithm(arr3, newsort(array)); 
1

三是与实现的主要问题。

  1. 如果您尝试实施合并排序,则必须对数组进行拆分,并在拆分之前对拆分的零件进行排序。

除此之外,这是我能找到的问题

  1. 您正在使用全局变量,midleftright是全局变量。

  2. 您不会从newsort函数返回排序后的数组。

  3. 您有两个定义的合并函数。

  4. 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));