快速排序代码

算法介绍

一趟快速排序的算法是:
1)设置两个变量i、j,排序开始的时候:i=0,j=N-1;
2)以第一个数组元素作为关键数据,赋值给key,即key=A[0];
3)从j开始向前搜索,即由后开始向前搜索(j--),找到第一个小于key的值A[j];
4)从i开始向后搜索,即由前开始向后搜索(i++),找到第一个大于key的A[i],将A[i]和A[j]互换;
5)重复第3、4步,直到i==j;

快速排序

public class Test {

    public static void main(String[] args) {

        int[] a = new int[] { 6, 1, 2, 7, 9, 3, 4, 5, 10, 8 };
        Test.sort(a);
    }

    public static void sort(int[] a) {
        Inner inner = new Inner();
        inner.a = a;
        inner.quicksort(0, a.length - 1);
    }

    private static class Inner {

        int[] a;

        // 递归形式
        public void quicksort(int left, int right) {

            // 递归出口
            if (left >= right) {
                return;
            }

            // 建立基准数
            int temp = a[left];

            // 初始化
            int i = left;
            int j = right;

            // 交换数据的临时缓存
            int t = 0;

            while (i < j) {
                while (a[j] >= temp && i < j) {
                    j--;
                }
                while (a[i] <= temp && i < j) {
                    i++;
                }
                if (i < j) {
                    t = a[j];
                    a[j] = a[i];
                    a[i] = t;
                    out(a);
                }
            }

            a[left] = a[i];
            a[i] = temp;
            out(a);
            quicksort(left, i - 1);
            quicksort(i + 1, right);
        }
    }

    public static void out(int[] a) {

        for (int i = 0; i < a.length; i++) {
            System.out.print(a[i] + " ");
        }
        System.out.println();
    }

}

代码执行过程

快速排序

图片 来源于 啊哈!算法.

转载于:https://my.oschina.net/u/3706181/blog/1594684

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值