@Override
	protected MutatorResult<Chromosome<G>> mutate(
		final Chromosome<G> chromosome,
		final double p,
		final RandomGenerator random
	) {
		final MutatorResult<Chromosome<G>> result;
		if (chromosome.length() > 1) {
			final var genes = MSeq.of(chromosome);
			final var range = _random.newRange(random, chromosome.length());

			genes.subSeq(range.a, range.b).shuffle();

			result = new MutatorResult<>(
				chromosome.newInstance(genes.toISeq()),
				range.b - range.a
			);
		} else {
			result = new MutatorResult<>(chromosome, 0);
		}

		return result;
	}
Changes the order of the genes between two points randomly.
jenetics/src/main/java/io/jenetics/ShuffleMutator.java