2014-04-08 54 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));