1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| var arr = [3,2,4,5,7,8,10,9,1,6]; var count = 0; function compare(a,b,c){ if(a > b){ if(b > c){ return b; } return a > c ? c : a; } if(a > c){ return a; } return b > c ? c : b; }
function fast(arr){ ++count; if(arr.length <= 1){ return arr; } var len = arr.length; var center = arr[Math.floor(len/2)]; var base = compare(arr[0],center,arr[len-1]); var left = []; var middle = []; var right = []; for(var i = 0 ; i < len ; i++){ if(arr[i] < base){ left.push(arr[i]); }else if(arr[i] == base){ middle.push(arr[i]); }else{ right.push(arr[i]); } } if(left.length == 0){ return left.concat(middle,fast(right)); }else if(right.length == 0){ return fast(left).concat(middle,right); }else if(left.length == 0 && right.length == 0){ return left.concat(middle,right); } return fast(left).concat(middle,fast(right)); } console.log(fast(arr)); console.log(count)
|