package com.jadekler.sarah;
import java.util.*;
public class QuickSort implements Sort {
Random random = new Random();
@Override
public int[] sort(int[] input) {
return inplaceSort(input, 0, input.length - 1);
}
private int[] inplaceSort(int[] input, int low, int high) {
if (low < high) {
int storedIndex = low;
int pivot = random.nextInt(high - low) + low;
swap(input, pivot, high);
for (int i = low; i < high; i++) {
if (input[i] < input[high]) {
swap(input, storedIndex, i);
storedIndex++;
}
}
swap(input, high, storedIndex);
inplaceSort(input, low, storedIndex - 1);
inplaceSort(input, storedIndex + 1, high);
}
return input;
}
private void swap(int[] input, int indexA, int indexB) {
int swapValue;
swapValue = input[indexA];
input[indexA] = input[indexB];
input[indexB] = swapValue;
}
}