function merge(left,right){
var result = [];
while(left.length>0&&right.length>0){
if(left[0]<right[0]){
result.push(left.shift());
}else{
result.push(right.shift());
}
}
return result.concat(left).concat(right);
}
function mergeSort(items){
if(items.length==1){
return items;
}
var half = Math.floor(items.length/2),
left = items.slice(0,half),
right = items.slice(half);
return merge(mergeSort(left),mergeSort(right));
}
function mergeSort(items){
var len = items.length;
if(len==1){
return items;
}
var result = [];
for(var i=0;i<len;i++){
result.push([items[i]]);
}
if(len%2){
result.push([]);
}
var lim = len/2;
while(lim>=1){
for(var j=0,k=0;j<lim;j++,k=k+2){
result[j] = merge(result[k],result[k+1]);
}
lim = lim/2;
}
return result[0];
}