Min and max in array (v14)

Revision 14 of this benchmark created by pusha on


Preparation HTML

<script>
var ARRAY_SIZE = 100000;
var values = [];
for (var i = 0; i < ARRAY_SIZE; ++i) {
  values[i] = Math.random();
}

//////////////////////////////////////////////////////////////

var minReduce = function(arr) {
  return arr.reduce(function(p, v) {
    return (p < v ? p : v);
  });
};
var maxReduce = function(arr) {
  return arr.reduce(function(p, v) {
    return (p > v ? p : v);
  });
};

//////////////////////////////////////////////////////////////

var minMath = function(arr) {
  return Math.min.apply(null, arr);
};
var maxMath = function(arr) {
  return Math.max.apply(null, arr);
};

//////////////////////////////////////////////////////////////

var minLoop = function(arr) {
  var len = arr.length,
    min = Infinity;
  while (len--) {
    if (arr[len] < min) {
      min = arr[len];
    }
  }
  return min;
};
var maxLoop = function(arr) {
  var len = arr.length,
    max = -Infinity;
  while (len--) {
    if (arr[len] > max) {
      max = arr[len];
    }
  }
  return max;
};

//////////////////////////////////////////////////////////////

var minLoopFor = function(arr) {
  var min = Infinity;
  for (var i = arr.length-1; i>=0; i--) {
    if (arr[i] < min) {
      min = arr[i];
    }
  }
  return min;
};
var maxLoopFor = function(arr) {
  var max = -Infinity;
  for (var i = arr.length-1; i>=0; i--) {
    if (arr[i] > max) {
      max = arr[i];
    }
  }
  return max;
};

//////////////////////////////////////////////////////////////

var minLoopUp = function(arr) {
  var min = Infinity;
  for (var i = 0; i < arr.length; i++) {
    if (arr[i] < min) {
      min = arr[i];
    }
  }
  return min;
};
var maxLoopUp = function(arr) {
  var max = -Infinity;
  for (var i = 0; i < arr.length; i++) {
    if (arr[i] > max) {
      max = arr[i];
    }
  }
  return max;
};

//////////////////////////////////////////////////////////////

var minLoopIn = function(arr) {
  var min = Infinity;
  for (var i in arr) {
    if (arr[i] < min) {
      min = arr[i];
    }
  }
  return min;
};
var maxLoopIn = function(arr) {
  var max = -Infinity;
  for (var i in arr) {
    if (arr[i] > max) {
      max = arr[i];
    }
  }
  return max;
};

//////////////////////////////////////////////////////////////

var minLoopFast = function(arr) {
  var min = arr[0];
  var x;
  for (var i = 1, n = arr.length; i < n; ++i) {
    x = arr[i];
    if (x < min) min = x;
  }
  return min;
};
var maxLoopFast = function(arr) {
  var max = arr[0];
  var x;
  for (var i = 1, n = arr.length; i < n; ++i) {
    x = arr[i];
    if (x > max) max = x;
  }
  return max;
};

//////////////////////////////////////////////////////////////

var minLoopIdx = function(arr) {
  var min = 0;
  for (var i = 1, n = arr.length; i < n; i++) {
    if (arr[i] < arr[min]) {
      min = i;
    }
  }
  return arr[min];
};
var maxLoopIdx = function(arr) {
  var max = 0;
  for (var i = 1, n = arr.length; i < n; i++) {
    if (arr[i] > arr[max]) {
      max = i;
    }
  }
  return arr[max];
};

//////////////////////////////////////////////////////////////

var minLoopMath = function(arr) {
  var min = arr[0];
  for (var i = 1, n = arr.length; i < n; ++i) {
    min = Math.min(arr[i], min);
  }
  return min;
};
var maxLoopMath = function(arr) {
  var max = arr[0];
  for (var i = 1, n = arr.length; i < n; ++i) {
    max = Math.max(arr[i], max);
  }
  return max;
};

//////////////////////////////////////////////////////////////

var minmaxLoop = function(arr) {
  var min = arr[0];
  var max = arr[0];
  var x;
  for (var i = 1, n = arr.length; i < n; ++i) {
    x = arr[i];
    if (x < min) min = x;
    if (x > max) max = x;
  }
  return [min, max];
};

//////////////////////////////////////////////////////////////

var minmaxLoopMath = function(arr) {
  var min = arr[0];
  var max = arr[0];
  var x;
  for (var i = 1, n = arr.length; i < n; ++i) {
    x = arr[i];
    min = Math.min(x, min);
    max = Math.max(x, max);
  }
  return [min, max];
};
</script>

Test runner

Ready to run.

Testing in
TestOps/sec
1.Reduce
maxReduce(values);
minReduce(values);
ready
2.Math
maxMath(values);
minMath(values);
ready
3.While
maxLoop(values);
minLoop(values);
ready
4.For
maxLoopFast(values);
minLoopFast(values);
ready
5.ForIn
maxLoopIn(values);
minLoopIn(values);
ready
6.ForIndex
maxLoopIdx(values);
minLoopIdx(values);
 
ready
7.ForMath
maxLoopMath(values);
minLoopMath(values);
ready
8.MinMax
minmaxLoop(values);
ready
9.MinMaxMath
minmaxLoopMath(values);
ready

Revisions

You can edit these tests or add more tests to this page by appending /edit to the URL.