快排算法实现java

package sortDmeo;

import java.util.Arrays;

/**
 * Created by BorisLiu on 2019/11/29
 */
public class QuickSort {

    public static void QuickSorted(int[] array,int start,int end){
        if (start>end){
            return;
        }
        int i = start;
        int j = end;

        int target = array[start];
        //比较
        //为什么不从i开始跑呢?
        //我们可以想一下,如果排序的数字是
        //2 1 3 4 5
        //基准数是 2
        //如果从左开始的话:跑到3
        //从右往左的话也是到3 因为左右相遇了
        //但是2如果跟3交换了
        //3 2 1 4 5  显然是错误的
        //但是从右往左就ok
        while (i<j){
            while (i<j&&array[j]>= target){
                j--;
            }
            while(i<j &&array[i]<=target){
                i++;
            }
            if (i<j){
                int temp = array[i];
                array[i] = array[j];
                array[j] = temp;
            }
        }
        //跑完之后i=j,然后基准数归位
        array[start] = array[i];
        array[i] = target;
        //递归左,右
        QuickSorted(array,start,i-1);
        QuickSorted(array,j+1,end);
    }



    public static void main(String[] args) {


        int[] array = {9,5,0,2,2,3,1,31,5,41,1,23,1,5};
        System.out.println(Arrays.toString(array));
        QuickSorted(array,0,array.length-1);
        System.out.println(Arrays.toString(array));
    }



}

运行结果:

[9, 5, 0, 2, 2, 3, 1, 31, 5, 41, 1, 23, 1, 5]
[0, 1, 1, 1, 2, 2, 3, 5, 5, 5, 9, 23, 31, 41]

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值