package com.interview.basics.sort; /** * Created with IntelliJ IDEA. * User: stefanie * Date: 10/17/14 * Time: 10:43 AM */ public class QuickSorterDualPivots<T extends Comparable<T>> extends QuickSorterSimplest<T> { @Override protected void sort(T[] input, int low, int high){ if (low >= high) return; findPivot(input, low, high, low); findPivot(input, low, high, high); if(input[low].compareTo(input[high]) > 0) swap(input, low, high); int i = low; int m = -1; for (int j = low + 1; j < high; j++) { if (input[j].compareTo(input[low]) < 0 && ++i != j) { swap(input, i, j); if (m > -1 && ++m < j) swap(input, m, j); } else if (input[j].compareTo(input[low]) >= 0 && input[j].compareTo(input[high]) <= 0) { if (m == -1) m = i; if (++m != j) swap(input, m, j); } } if(low != i) swap(input, low, i); sort(input, low, i - 1); if(m != -1) { if(++m != high) swap(input, high, m); sort(input, i + 1, m - 1); sort(input, m + 1, high); } else { sort(input, i + 1, high); } } }