@Override
		protected void compute() {
			int sortingSize = endIndex - startIndex;
			if (sortingSize <= directSortingSize) {
				sortDirectly();
			} else if (sortingSize == 2) {
				compareAndSwap(startIndex, endIndex - 1);
			} else if (sortingSize > 2) {
				int middleIndex = splitData(startIndex, endIndex);
				List<RecursiveAction> nextSteps = new ArrayList<RecursiveAction>(
						2);
				if (middleIndex - startIndex > 1)
					nextSteps.add(createNewStep(startIndex, middleIndex));
				if (endIndex - middleIndex > 2)
					nextSteps.add(createNewStep(middleIndex + 1, endIndex));
				invokeAll(nextSteps);
			}
		}