Java实现快速排序(四)

Java快速排序

引言

快速排序一定是面试中最常见的算法题了,最近在准备面试,所以再来把快排复习一下,今天更一下大家能百度到的最常见的快排写法,我也是参照其他博客内容自己写了一遍,然后写了下注释,建议要搞懂,还是自己默写一遍,达到手撕快排的水平,这样面试再也不会怂了。

当然,要面试BAT等互联网,光会手写快排还是远远不够的,什么快排优化了,复杂度,是否原地排序了,这些都得要搞懂,之后有时间再更新一下算法4里的快排,至于快排原理,大可随便百度,千篇一律的那个文章,静下心来慢慢也是能看懂的。

先贴一个极客时间的快排介绍:

在这里插入图片描述
思想

递归代码


/**
 * @program: JavaSpecialityDeep
 * @author: Mr.Zerah
 * @create: 2019-08-20 22:48
 * @description: Java快速排序
 **/
public class QuickSort {
    public static void main(String[] args) {
        int [] arr = {10,7,2,4,7,62,3,4,2,1,8,9,19};
        quickSort(arr, 0, arr.length -1);
        for (int i = 0; i < arr.length; i++) {
            System.out.print(" "+ arr[i]);
        }
    }
    public static void quickSort(int []arr, int low, int high){
        int i ,j,temp,target;
        if (low > high) return;
        i =low;
        j =high;
        //基准数
        target = arr[low];
        while (i<j){
            //从右往左扫描,当找到比基准数小的数跳出循环
            while (target <= arr[j] && i< j){
                j--;
            }
            //从左往右扫描,当找到比基准数大的数则跳出循环
            while (target >= arr[i] && i <j){
                i++;
            }
            if (i< j){
                temp = arr[j];
                arr [j] = arr[i];
                arr [i] = temp;
            }
        }
        //执行完上面一次循环,即当前基准数arr[i]左边的数均以小于基准数target, 
        arr[j]右边的数均大于基准数,但是基准数的位置还没有排定
      
        //然后将基准数与I和j相等的数字交换,以确定基准数的位置
        arr [low] = arr[i];
        arr [i] = target;
        //递归调用左半数组
        quickSort(arr,low , j-1);
        //递归调用右半数组
        quickSort(arr, j+1, high);
    }
}

关于交换基准数和arr[i]交换位置的过程再特别通过debug说明一下,以便有个更清晰的认识

//然后将基准数与I和j相等的数字交换,以确定基准数的位置
    arr [low] = arr[i];
    arr [i] = target;

在这里插入图片描述

参考

https://blog.csdn.net/qq_36186690/article/details/82470451

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值