快速排序

快速排序由于排序效率在同为O(N*logN)的几种排序方法中效率较高,因此经常被采用,再加上快速排序思想----分治法

该方法的基本思想是:

1.先从数列中取出一个数作为基准数 base。
2.左右同时往中间遍历,找到所有左边比base大的数与右边小于或等于base的数值进行位置互换,直到左边和右边index相同本次遍历结束,并将index中的数字与base交互。
3.再对index左右区间重复第二步,直到各区间只有一个数。

public class QuickDemo {

    public static void main(String[] args) {
        int[] a = {1, 2, 5, 7, 9, 3, 0, 4};
        quickSort(a);
        for (int i : a) {
            System.out.println(i);
        }
    }


    public static void quickSort(int[] a) {
        quickSort(a, 0, a.length - 1);
    }

    public static void quickSort(int[] a, int left, int right) {
        if (left > right) {//退出递归
            return;
        }
        //设置基准数字 和左右两边起点
        int base = a[left];
        int i = left;
        int j = right;

        while (i != j) {

            while (a[i] <= base && i < j) {
                i++;
            }
            while (a[j] >= base && j > i) {
                j--;
            }
            if (i < j) {
                int t = a[i];
                a[i] = a[j];
                a[j] = t;
            }
        }
        a[left] = a[i];
        a[i] = base;
        quickSort(a, left, right- 1);
        quickSort(a, i + 1, right);


    }
}

你可能感兴趣的:(快速排序)