private void sort(ArrayList<ArrayList<Step>> allSteps, byte[] values,
			int start, int end) {
		if (end - start < 1)
			return;
		ArrayList<Step> steps = new ArrayList<Step>();
		int pivotIndex = start;
		if (end - start == 1) {
			steps.add(new QuickCompareStep(pivotIndex, start, end, values.clone(),
					start, end));
			if (values[start] > values[end]) {
				byte temp = values[start];
				values[start] = values[end];
				values[end] = temp;
				steps.add(new QuickSwapStep(pivotIndex, start, end, values.clone(),
						start, end));
			}
		} else {
			for (int i = start + 1; i <= end; i++) {
				steps.add(new QuickCompareStep(pivotIndex, start, end, values
						.clone(), i, pivotIndex));
				if (values[i] < values[pivotIndex]) {
					for (int j = i; j > pivotIndex; j--) {
						byte temp = values[j];
						values[j] = values[j - 1];
						values[j - 1] = temp;
						if (j - 1 == pivotIndex)
							pivotIndex++;
						steps.add(new QuickSwapStep(pivotIndex, start, end,
								values.clone(), j - 1, j));
					}
				}
			}
		}
		allSteps.add(steps);
		sort(allSteps, values, start, pivotIndex - 1);
		sort(allSteps, values, pivotIndex + 1, end);
	}