default MSeq<T> shuffle(final RandomGenerator random) {
		for (int j = length() - 1; j > 0; --j) {
			swap(j, random.nextInt(j + 1));
		}
		return this;
	}
Randomize the {@code array} using the given {@link RandomGenerator} object. The used
shuffling algorithm is from D. Knuth TAOCP, Seminumerical Algorithms,
Third edition, page 142, Algorithm S (Selection sampling technique).

@param random the {@link RandomGenerator} object to use for randomize.
@return this shuffled sequence
@throws NullPointerException if the random object is {@code null}.
jenetics/src/main/java/io/jenetics/util/MSeq.java