package com.interview.basics.sort;
import java.util.Random;
/**
* Created with IntelliJ IDEA.
* User: stefanie
* Date: 10/16/14
* Time: 4:30 PM
*/
public class QuickSorterSimplest<T extends Comparable<T>> extends Sorter<T> {
static Random RAND = new Random();
@Override
public T[] sort(T[] input) {
sort(input, 0, input.length - 1);
return input;
}
protected void sort(T[] input, int low, int high){
if(low >= high) return;
findPivot(input, low, high, low);
int i = low;
for(int j = low + 1; j <= high; j++)
if(input[j].compareTo(input[low]) < 0 && ++i != j) swap(input, i, j);
if(low != i) swap(input, low, i);
sort(input, low, i - 1);
sort(input, i + 1, high);
}
protected void findPivot(T[] input, int low, int high, int key){
int rand = low + RAND.nextInt(high - low); //random shuffle
if (rand != key) swap(input, rand, key);
}
}