#include <stdlib.h>

/* Permute the given array. Uses rand(3), so seed as desired.
 * Adapted by Jerod Weinman from an algorithm written by John David Stone */
void
permute (int array[], size_t len)
{
  long swap_index;
  int temp_val;

  if (len <= 1) // Nothing to permute if 0 or 1 items
    return;
  
  // Work from the end of the array forward, randomly choosing an element to
  // transpose at each location remaining
  size_t remaining = len;
  do {
    swap_index = remaining * (rand() / (double)RAND_MAX);
    temp_val = array[swap_index];
    array[swap_index] = array[remaining-1];
    array[remaining-1] = temp_val;
  } while ( --remaining != 0 );
} // permute
