package processing.data; /** * Internal sorter used by several data classes. * Advanced users only, not official API. */ public abstract class Sort implements Runnable { public Sort() { } public void run() { int c = size(); if (c > 1) { sort(0, c - 1); } } protected void sort(int i, int j) { int pivotIndex = (i+j)/2; swap(pivotIndex, j); int k = partition(i-1, j); swap(k, j); if ((k-i) > 1) sort(i, k-1); if ((j-k) > 1) sort(k+1, j); } protected int partition(int left, int right) { int pivot = right; do { while (compare(++left, pivot) < 0) { } while ((right != 0) && (compare(--right, pivot) > 0)) { } swap(left, right); } while (left < right); swap(left, right); return left; } abstract public int size(); abstract public float compare(int a, int b); abstract public void swap(int a, int b); }