Development Class Java

//package com.ryanm.util;
import java.util.Arrays;
import java.util.Comparator;
import java.util.Random;
/**
 * A garbage-free randomised quicksort
 * 
 * @author ryanm
 */
public class QuickSort {
  private static final Random rng = new Random();
  private QuickSort() {
    // no instances
  }
  /**
   * @param 
   * @param array
   * @param comp
   */
  public static  void sort(T[] array, Comparator comp) {
    sort(array, comp, 0, array.length - 1);
  }
  /**
   * @param 
   * @param array
   * @param comp
   * @param lo
   *            lowest index to sort
   * @param hi
   *            highest index to sort
   */
  public static  void sort(T[] array, Comparator comp, int lo, int hi) {
    if (hi > lo) {
      // choose random element to pivot on
      int pivotIndex = rng.nextInt(hi - lo) + lo;
      // swap elements till everything smaller than the pivot lies
      // before it
      pivotIndex = partition(array, comp, lo, hi, pivotIndex);
      // recurse
      sort(array, comp, lo, pivotIndex - 1);
      sort(array, comp, pivotIndex + 1, hi);
    }
  }
  /**
   * Shuffle elements around to partially-sorted low/pivot/high order
   * 
   * @param 
   * @param array
   * @param comp
   * @param lo
   * @param hi
   * @param pivotIndex
   *            the starting index of the pivot element
   * @return The new index of the pivot element
   */
  private static  int partition(T[] array, Comparator comp, int lo,
      int hi, int pivotIndex) {
    T pivot = array[pivotIndex];
    // send pivot to the back
    swap(array, pivotIndex, hi);
    // index of low/high boundary
    int index = lo;
    for (int i = lo; i < hi; i++) {
      if (comp.compare(array[i], pivot) <= 0) { // element is lower or
                            // equal to the pivot
                            // swap it to the low
                            // region
        swap(array, i, index);
        index++;
      }
    }
    swap(array, hi, index);
    return index;
  }
  /**
   * Swaps elements
   * 
   * @param 
   * @param array
   * @param i
   * @param j
   */
  private static  void swap(T[] array, int i, int j) {
    T temp = array[i];
    array[i] = array[j];
    array[j] = temp;
  }
  /**
   * @param args
   */
  public static void main(String[] args) {
    Integer[] array = new Integer[15];
    Random rng = new Random();
    int split = 10;
    for (int i = 0; i < split; i++) {
      array[i] = new Integer(rng.nextInt(100));
    }
    for (int i = split; i < array.length; i++) {
      array[i] = null;
    }
    System.out.println(Arrays.toString(array));
    QuickSort.sort(array, new Comparator() {
      @Override
      public int compare(Integer o1, Integer o2) {
        return o1.compareTo(o2);
      };
    }, 0, split - 1);
    System.out.println(Arrays.toString(array));
  }
}