package com.bao.sort; public class ImprovedQuickSort implements SortUtil.Sort { private static int MAX_STACK_SIZE = 4096; private static int THRESHOLD = 10; /* (non-Javadoc) * @see org.rut.util.algorithm.SortUtil.Sort#sort(int[]) */ public void sort(int[] data) { int[] stack = new int[MAX_STACK_SIZE]; int top = -1; int pivot; int pivotIndex, l, r; stack[++top] = 0; stack[++top] = data.length - 1; while (top > 0) { int j = stack[top--]; int i = stack[top--]; pivotIndex = (i + j) / 2; pivot = data[pivotIndex]; SortUtil.swap(data, pivotIndex, j); //partition l = i - 1; r = j; do { while (data[++l] < pivot) ; while ((r != 0) && (data[--r] > pivot)) ; SortUtil.swap(data, l, r); } while (l < r); SortUtil.swap(data, l, r); SortUtil.swap(data, l, j); if ((l - i) > THRESHOLD) { stack[++top] = i; stack[++top] = l - 1; } if ((j - l) > THRESHOLD) { stack[++top] = l + 1; stack[++top] = j; } } //new InsertSort().sort(data); insertSort(data); } /** * @param data */ private void insertSort(int[] data) { int temp; for (int i = 1; i < data.length; i++) { for (int j = i; (j > 0) && (data[j] < data[j - 1]); j--) { SortUtil.swap(data, j, j - 1); } } } }