2016-07-28 38 views
0

嘗試在JavaScript中遞歸地編寫它。我得到了和以前一樣的數組(即沒有改變)。我的穩定分區算法存在哪些缺陷?

缺陷在哪裏?

function unstable_partition (arr, f) 
{ 
     if(arr.length <= 1) 
     return arr; 
    var n = arr.length - 1; 
    if(f(arr[0])) 
     return unstable_partition(arr.slice(0,n),f).concat([arr[0]]); 
    else if(!f(arr[n])) 
     return [arr[n]].concat(unstable_partition(arr.slice(0,n - 1),f)); 
    else 
     return [arr[0]].concat(unstable_partition(arr.slice(1,n - 1)),f).concat([arr[n]]); 
} 

var isEven = function(x) { return x % 2 == 0; } 
var myArray = [1,2,3,3,4,5]; 
alert(unstable_partition(myArray,isEven).join(",")); 
+0

它不會返回同一陣列我。並且順便說一句,你誤會了你最後的回報,不應該是'return [arr [0]]。concat(unstable_partition(arr.slice(1,n-1),f))。concat([arr [n]] );'? – choz

回答

1

片不包括最後一個元素,沒有必要做「-1」,當你把它

更正代碼: https://jsfiddle.net/n7g7yfju/

function unstable_partition (arr, f) 
{ 
     if(arr.length <= 1) 
     return arr; 
    var n = arr.length - 1; 
    if(f(arr[0])) 
     return unstable_partition(arr.slice(0,n),f).concat([arr[0]]); 
    else if(!f(arr[n])) 
     return [arr[n]].concat(unstable_partition(arr.slice(0,n),f)); 
    else 
     return [arr[0]].concat(unstable_partition(arr.slice(1,n),f)).concat([arr[n]]); 
} 

var isEven = function(x) { return x % 2 == 0; } 
var myArray = [1,2,3,3,4,5]; 
alert(unstable_partition(myArray,isEven).join(",")); 
+1

你是說切片? –

+0

Ops,ty @JaromandaX。固定。 – serhiyb

相關問題