public abstract class Sorter { public abstract void sort(int [] array); }
public class QuickSorter extends Sorter { @Override public void sort(int[] array) { quickSort(array, 0, array.length - 1); } private void quickSort(int[] array, int low, int high) { int pivotPos;//划分基准元素索引 if (low < high) { pivotPos = partition(array, low, high); quickSort(array, low, pivotPos - 1);//左划分递归快速排序 quickSort(array, pivotPos + 1, high);//右划分递归快速排序 } } /** * 简单划分方法 * * @param array * @param i * @param j * @return */ private int partition(int[] array, int i, int j) { Integer pivot = array[i];//初始基准元素,如果过quickSort方法第一次调用,那么pivot初始为数组第一个元素 while (i < j) {//两个指针从两侧向中间靠拢,不能相交 //右侧指针向左移动 while (j > i && array[j] >= pivot) { j--; } if (i < j) {//如果在i和j没有相遇的情况下,找到了array[j] >= 基准元素pivot array[i] = array[j]; } //左侧指针向右移动 while (i < j && array[i] <= pivot) { i++; } if (i < j) {//如果在没有使i和j相交的情况下找到array[i] <= 基准元素pivot array[j] = array[i];//基准元素放到i指针处 j--;//右侧j指针需要向左移动一个位置 } } array[i] = pivot;//将基准元素放到正确的排序位置上 return i; } }
public class Test { public static void main(String[] args) { int [] arr = {94,12,34,76,26,9,0,37,55,76,37,5,68,83,90,37,12,65,76,49}; Sorter sorter = new QuickSorter(); sorter.sort(arr); System.out.println(Arrays.toString(arr)); } }