一、快速排序

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));

    }
}

猜你喜欢

转载自www.cnblogs.com/beanbag/p/9664208.html