java实现快速排序,保姆级教程,一看即会!

tips:debug自己跑一下,看一下内部实现原理,可以更好的理解!

快速排序

原理:在数组中选择一个基准值,然后定义两个索引,这里选择第一个元素和最后一个元素下标,循环比较开始之前,定义一个变量记录当前基准值的值,然后从最后一个元素开始比较,将大于基准值的元素放到基准值的右边,小于基准值的元素放到基准值的左边,当两个索引值相等的时候,遍历结束,将先前变量记录的值赋值给当前索引,左半边和右半边循环执行上次操作,直到每一个区间只有一个值的时候,结束,此时,数组已经排好序了!
如下图所示:
在这里插入图片描述

代码实现

package com.lian.convert;

import com.alibaba.fastjson.JSON;

/**
 * @author :LSS
 * @description:快速排序
 * @date :2021/3/31 10:44
 */
public class QuickSort {
    public static int A(int[] nums, int start, int end) {
        //定义基准值(默认是数组第一个值)
        int mediaValue = nums[start];
        //一次排序挪值的过程
        while (start < end) {
            //找到比基准值小的放到基准值的左边
            while (start < end && mediaValue <= nums[end]) {
                end--;
            }
            //找到后放到左边,左边下标加一
            if (start < end) {
                nums[start] = nums[end];
                start++;
            }
            //找到比基准值大的放到基准值的右边
            while (start < end && mediaValue >= nums[start]) {
                start++;
            }
            //找到后放到右边,右边下标减一
            if (start < end) {
                nums[end] = nums[start];
                end--;
            }
        }
        //start和end相等时,第一次排序结束,将mediaValue的值赋值给当前下标
        nums[start] = mediaValue;
        //返回当前基准值对的下标
        return start;
    }

    public static void QuickSort(int[] nums, int start, int end) {
        int a;
        if (start < end) {
            //循环比较,最后基准值左边全是小于基准值的,右边全是大于基准值的,返回当前基准值对的下标
            a = A(nums, start, end);
            //左右两边继续循环排序,直到每个区间只有一个值结束
            QuickSort(nums, start, a - 1);
            QuickSort(nums, a + 1, end);
        }
    }

    public static void main(String[] args) {
        //要排序的数组
        int[] nums = {1, 4, 6, 32, 4, 13, 9};
        //执行程序进行排序
        QuickSort(nums, 0, nums.length - 1);
        //将排序之后的数组转化为字符串并输出
        System.out.println(JSON.toJSONString(nums));
    }
}

总结

不积跬步,无以至千里!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值