Optimized Fisher-Yates

JavaScript performance comparison

Test case created by Gavin Kistner


Comparing a minor change to this implementation: http://stackoverflow.com/a/962890/405017

Preparation code

Benchmark.prototype.setup = function() {
    a = [];
    for (var i=1000;i--;) a[i]=i;

Test runner

Warning! For accurate results, please disable Firebug before running the tests. (Why?)

Java applet disabled.

Testing in unknown unknown
Test Ops/sec
Guarded while
var tmp, current, top = a.length;

if(top) while(--top) {
  current = Math.floor(Math.random() * (top + 1));
  tmp = a[current];
  a[current] = a[top];
  a[top] = tmp;
Unguarded shift
for (var tmp, cur, top=a.length; top--;){
  cur = (Math.random() * (top + 1)) << 0;
  tmp = a[cur];
  a[cur] = a[top];
  a[top] = tmp;

Compare results of other browsers


You can edit these tests or add even more tests to this page by appending /edit to the URL. Here’s a list of current revisions for this page:


Comment form temporarily disabled.

Add a comment