2017-08-15 143 views
0

插入排序功能不起作用,錯誤是:函數運行時間太長。也許你的代碼有錯誤?爲什麼我的代碼無法運行?插入排序

// this function 
var insert = function(array, rightIndex, value) { 
    for(var j = rightIndex; 
     j >= 0 && array[j] > value; 
     j--) 
    { 
     array[j + 1] = array[j]; 
    } 
    array[j + 1] = value; 
}; 

var insertionSort = function(array) { 
    for(var i = 0; i < array.length ; i++) 
    { 
     insert(array,i,array[i+1]); 
    } 
}; 

var array = [22, 11, 99, 88, 9, 7, 42]; 
insertionSort(array); 
println("Array after sorting: " + array); 
Program.assertEqual(array, [7, 9, 11, 22, 42, 88, 99]); 

回答

0

var insert = function(array, rightIndex, value) { 
 
    for(var j = rightIndex; 
 
     j >= 0 && array[j] > value; 
 
     j--) 
 
    { 
 
     array[j + 1] = array[j]; 
 
    } 
 
    array[j + 1] = value; 
 
}; 
 

 
var insertionSort = function(array) { 
 
    for(var i = 0; i < array.length - 1 ; i++) 
 
    { 
 
     insert(array,i,array[i+1]); 
 
    } 
 
}; 
 

 
var array = [22, 11, 99, 88, 9, 7, 42]; 
 
insertionSort(array); 
 
console.log(array);

,你應該爲你與我+ 1調用插件()函數來運行你的循環少1次迭代;

1

你的問題是選擇爲[i+1]陣列位置和[j+1]

變化

var insert = function(array, rightIndex, value) { 
    for(var j = rightIndex; 
     j >= 0 && array[j] > value; 
     j--) 
    { 
     array[j + 1] = array[j]; 
    } 
    array[j + 1] = value; 
}; 

var insert = function(array, rightIndex, value) { 
    for(var j = rightIndex; 
      j > 0 && array[j-1] > value; 
      j--) 
     { 
      array[j] = array[j-1]; 
     } 
     array[j] = value; 
    }; 

insert(array, i, array[i+1]); 

insert(array, i, array[i]); 
+0

可能是值得解釋爲什麼這種變化是必要的。由於沒有人會從這個答案中學習 – Deckerz

+0

通過'array [i + 1]'我們不能確定是否存在'i + 1'元素 –

+0

問題是設置了插入函數insertSort而不是插入, 雖然在執行完這個更改錯誤保持不變 –

0

嘗試通過陣列倒退的插入排序函數內部:

var insertionSort = function(array) { 
    for (var i = array.length - 1; i >= 0; i--) { 
    insert(array,i,array[i+1]); 
    } 
}; 
相關問題