图解快速排序算法

快速排序算法步骤:
1.选择一个基数。
2.把i和j想象成两个巡逻员,一个巡逻员从数组最右边的数向左寻找比基数小的数,找到后暂时停止寻找。另一个从数组最左边向右寻找比基数大的数,找到后暂停寻找。
3.交换步骤2找到的两个数。
4.继续2步骤,直到两个巡逻员碰面。把基数和他们碰面的那个位置数字兑换位置。这时他们的左边数字都不大于基数,右边的数字都不小于基数。
5.以他们碰面的位置为中心,把原数组分成左右两个新数组。然后两个数组重复巡逻员探测的过程。这样迭代下去最终所有的数字都按照从小到大的顺序排列了。
快速排序算法

public class Test {
    private static int number[];
    public static void quickSort(int left, int right){
        if(left > right)
            return;
        int i = left;//左下标
        int j = right;//右下标
        int temp = number[i];//存放基数

        while(i != j){
            //左边第一个比基数大的数的下标
            while(number[i] <= temp && i < j){
                i++;
            }
            //右边第一个比基数小的数的下标
            while(number[j] >  temp && i < j){
                j--;
            }
            //两数交换
            int t = number[i];
            number[i] = number[j];
            number[j] = t;
        }
        //现在i=j了,他们在数组的某个位置会和了,这个位置左边所有的数小于基准数,右边的数都大于基准数字
        //把基准数字从数组的左边移动到i和j会和的位置
        number[left] = number[i];
        number[i] = temp;


        //递归调用,让左右两边两个数组重复刚才的动作
        quickSort(left, j-1);
        quickSort(j+1, right);
    }
    public static void main(String[] args) {
        Random random = new Random();
        number = new int[10_0000];
        for(int i = 0; i < number.length; i++){
            number[i] = random.nextInt(10000);
        }
        long startTime = System.currentTimeMillis();
        quickSort(0, number.length - 1);

        System.out.println("结束时间:" + (System.currentTimeMillis() - startTime));
        for(int i = 1; i < 100; i++){
            System.out.println(number[i * 1000]);
        }
    }
}
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值