快速排序的二三事

快速排序

快速排序是一种分治的排序算法。即将一个数组分为两个独立的子数组,将两个数组分别排序,当两部分子数组分别有序之后,整个数组也就有序了。这也就是说必须要有一个切分元素,将比这个切分元素小的元素放在一个数组中,将比这个切分元素大的元素放在另一个数组中。从而才能实现当两部分分别有序的时候,整个数组也有序。

快速排序的代码:

public class QuickSort {
    public void sort(int[] a) {
        sort(a, 0, a.length - 1);
    }

    private void sort(int[] a, int lo, int hi) {
        if (lo >= hi) {
            return;
        }
        int temp = partition(a, lo, hi);
        sort(a, lo, temp - 1);
        sort(a, temp + 1, hi);
    }

    private int partition(int[] a, int lo, int hi) {
        //规定两个数组的指针
        int i = lo;
        int j = hi + 1;

        //设定切分元素
        int par = a[lo];
        while (true) {
            while (par > a[++i]) {
                if (i == hi) {
                    break;
                }
            }
            while (par < a[--j]) {
                if (j == lo) {
                    break;
                }
            }
            if (i >= j) {
                break;
            }
            exch(a, i, j);
        }
        exch(a, lo, j);
        return j;
    }

    //交换数组中的两个元素的位置
    private void exch(int[] a, int lo, int hi) {
        int temp = a[lo];
        a[lo] = a[hi];
        a[hi] = temp;
    }
}

点赞