Java 快排

基于分治法的快排,用递归实现。

首先讲一下实现的过程.

1.在数组中取一个数作为基准,所谓的基准就是用来对比的数.

2.然后在数组中从后往前找,找到一个逆序数为止,找到之后就把它的值赋值到基准数的位,假设此逆序数的为止为j.

3.然后再数组中从前往后找,找到一个逆序为止,然后把这个值赋值到j位置,假设此次逆序数位置为i.

4.重复23.直i>=j.

说白点,假设目标顺序是升序,那么,在一次迭代后,处于基准为止左边的数全部的数都小于基准数,右边的全部都大于基准数。

然后再用分治法的思想,递归的调用(left,i-1)和(i+1,right)就可以完成排序.

代码如下

    public static void quicksort(int[] a, int left, int right) {
        int i = left;
        int j = right;
        if (i < j) {
            int p = a[left];
            while (i < j) {
                while (a[j] >= p && j > i) {
                    j--;
                }
                if (i < j) {
                    a[i] = a[j];
                    
                }
                while (a[i] <= p && i < j) {
                    i++;
                }
                if (i < j) {
                    a[j] = a[i];
                }
            }
            a[i] = p;
            quicksort(a, left, i-1);
            quicksort(a, i+1, right);
        }
    }

 

posted @ 2015-11-07 21:46  hudiwei-hdw  阅读(212)  评论(0编辑  收藏  举报