'use strict'; 
 | 
var arraySlice = require('../internals/array-slice'); 
 | 
  
 | 
var floor = Math.floor; 
 | 
  
 | 
var sort = function (array, comparefn) { 
 | 
  var length = array.length; 
 | 
  
 | 
  if (length < 8) { 
 | 
    // insertion sort 
 | 
    var i = 1; 
 | 
    var element, j; 
 | 
  
 | 
    while (i < length) { 
 | 
      j = i; 
 | 
      element = array[i]; 
 | 
      while (j && comparefn(array[j - 1], element) > 0) { 
 | 
        array[j] = array[--j]; 
 | 
      } 
 | 
      if (j !== i++) array[j] = element; 
 | 
    } 
 | 
  } else { 
 | 
    // merge sort 
 | 
    var middle = floor(length / 2); 
 | 
    var left = sort(arraySlice(array, 0, middle), comparefn); 
 | 
    var right = sort(arraySlice(array, middle), comparefn); 
 | 
    var llength = left.length; 
 | 
    var rlength = right.length; 
 | 
    var lindex = 0; 
 | 
    var rindex = 0; 
 | 
  
 | 
    while (lindex < llength || rindex < rlength) { 
 | 
      array[lindex + rindex] = (lindex < llength && rindex < rlength) 
 | 
        ? comparefn(left[lindex], right[rindex]) <= 0 ? left[lindex++] : right[rindex++] 
 | 
        : lindex < llength ? left[lindex++] : right[rindex++]; 
 | 
    } 
 | 
  } 
 | 
  
 | 
  return array; 
 | 
}; 
 | 
  
 | 
module.exports = sort; 
 |