八大排序之快速排序(java实现)

一、快速排序原理(从小到大)

1.基本思想

        通过一趟排序将待排序列分成两部分,若一部分比另一部分小,则可继续对这两部分继续排序,从而使整个待排序列变得有序。

2.算法描述

        1)将数组中的一个数字作为基准数

        2)一般将数组中左边第一个数字作为基准数,然后从两边开始遍历,左边找比基准数大的,右边找比基准数小的,都找到后交换两个数的位置,当两指针相遇时,将指针所指向的数于基准数交换,然后数组被分成了两部分。

3)递归地对上一步分出的两数组进行排序。

3.图示

这里只展示一轮,后续过程类似。

 

 

开始遍历

 

两边都遍历到,交换两数的位置

 

 继续遍历

 同样交换两数位置

 

 继续遍历,两指针相遇

 

 将两指针共同指向的数与及基准数交换位置

第一轮完成,此时基准数6的位置的有序的,数组被分成了两部分,左边的比基准数小,右边的比基准数大,对数组分成的两部分递归运用此方法即可得到有序数组

 二、代码实现

public static void main(String[] args) {
        int[] nums = new int[]{6,1,2,5,4,3,9,7,10,8};
        quickSort(nums,0, nums.length - 1);
        System.out.println(Arrays.toString(nums));
    }
    public static void quickSort(int[] nums,int left,int right){
        //进行判断 如果左边索引比右边的索引要大 是不合法的 直接使用 return 结束这个方法
        if(left >= right){
            return;
        }
        //基准数
        int base = nums[left];
        //i指向最左边
        int i = left;
        //j指向最右边
        int j = right;
        while (i != j){
            //先由j 从 右向左检索比基准数小的,如果检索到比基准数小的就停下
            while (nums[j] >= base && i < j){
                j--;
            }
            // i 从左向右检索
            while (nums[i] <= base && i < j){
                i++;
            }
            //代码走到这里。i 和 j 都停下了,然后交换 i 和 j的位置元素
            int temp = nums[i];
            nums[i] = nums[j];
            nums[j] = temp;
        }
        // 如果while循环条件不成立,这就代表了 i和 j相遇了,就停止检索
        //交换基准数和这个相遇位置的元素进行交换
        nums[left] = nums[i];
        //把基准数赋值给相遇位置的元素
        nums[i] = base;

        //递归调用
        quickSort(nums,left,i - 1);
        quickSort(nums,j + 1,right);
    }

 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值