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

 

转载于:https://www.cnblogs.com/dick159/p/4946172.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值