史上最详细图解快速排序的方法_快速排序的基本步骤

史上最详细图解快速排序的方法_快速排序的基本步骤0.前言找了好多贴在都没有找到舒心的一次能看懂的文章,决定把学明白每一步全部图解出来。推荐一个博主的文章也很不错:https://blog.csdn.net/weixin_42109012/article/details/916450511.图解开始![在这里插入图片描述](https://img-blog.csdnimg.cn/e6bbdfbe97e44bbd99f99cf456c998ed.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

0.前言

找了好多贴在都没有找到舒心的一次能看懂的文章,决定把学明白每一步全部图解出来。
代码在最后
把分享博主里共享的教科书图放这
在这里插入图片描述

1.图解开始

在这里插入图片描述
贴一张大长图
在这里插入图片描述

2. Java代码实现

package learn.algorithm.sort;

import java.util.Arrays;
import java.util.stream.IntStream;

/** * 快速排序 * 应用最广泛的排序算法,实现简单,适用于各种不同的输入数据且在一般应用中比其他排序算法那都要快的多 * 最引人注目的特点包括它是原地排序(只需一个很小的辅助栈),且长度为N的数组排序所需的时间和NlgN成正比。 * @author WangWenLei * @DATE: 2021/5/27 **/
public class FastSort { 
   
    public static void main(String[] args) { 
   
        int [] data = new int[]{ 
   1,7,3,11,8,5,10,2,4,9,6};
        fastSort(data,0,data.length - 1);
        Arrays.stream(data).forEach(System.out::println);
    }

    public static void fastSort(int [] data,int low,int high){ 
   
        if(low >= high){ 
   
            return;
        }
        int pivot = data[low];
        int i = low;
        int j = high;
        while(i < j){ 
   
            // 因为 要 想左移动j,直到data[j] < pivot
            while(i < j && pivot < data[j]){ 
   
                j -- ;
            }
            if(i < j){ 
   
                data [i] = data[j];
                i++;
            }
            while(i < j && pivot > data[i]){ 
   
                i ++ ;
            }
            // 下面的if在第一次编写时丢了,导致少了一部分逻辑
            if(i < j){ 
   
                data [j] = data[i];
                j--;
            }
        }
        data[i] = pivot;
        fastSort(data,low,--i);
        // 这里第一次编写时错误的使用了 ++i,现在改成了++j。错误原因i在上面已经被减过了
        fastSort(data,++j,high);
    }
}


文文的博客
推荐一个博主的文章也很不错:https://blog.csdn.net/weixin_42109012/article/details/91645051

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/194124.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 好友朋友圈动态仅三天可见?点击这个按钮,不管多久都能看

    好友朋友圈动态仅三天可见?点击这个按钮,不管多久都能看微信朋友圈可以说是了解好友的最好地方,但是现在大部分人都会设置朋友圈动态仅三天可见的权限。这样就只能看到好友三天内的朋友圈内容,其实只要点击这个按钮,多久都能看!先给大家介绍一点朋友圈小技巧吧!快速设置朋友圈权限朋友圈最烦人的就是广告了,本来想看看好友们有趣的动态,但翻了好几页都是广告。其实只需长按对方头像,就能设置不看对方的权限啦!发表纯文字朋友圈家里…

    2022年6月11日
    99
  • adb工具+使用adb安装apk「建议收藏」

    adb工具+使用adb安装apk「建议收藏」adb链接:https://pan.baidu.com/s/1pdpIc9oXaqvN4lSrVLR_VA提取码:kxhc使用方法:1.解压压缩包。2.将解压后的文件夹放到合适的目录(我放到了C盘根目录)3.打开windows命令窗口,设置到adb工具目录(cdC:\adb)4.使用adb命令查看链接到的计算机的android设备(adbdevices)5.使用…

    2022年5月20日
    87
  • CentOS 7.5 PhpMyAdmin安装教程

    CentOS 7.5 PhpMyAdmin安装教程PhpMyAdmin简介:phpMyAdmin是一个以PHP为基础,以Web-Base方式架构在网站主机上的MySQL的数据库管理工具,让管理者可用Web接口管理MySQL数据库。借由此Web接口可以成为一个简易方式输入繁杂SQL语法的较佳途径,尤其要处理大量资料的汇入及汇出更为方便。其中一个更大的优势在于由于phpMyAdmin跟其他PHP程式一样在网页服务器上执行,但是您可以在任何地方使用…

    2022年5月31日
    29
  • webpack版本问题「建议收藏」

    webpack版本问题「建议收藏」由于webpack版本较多,而且配置写法,每个版本都大大小小有差异,因版本问题造成的错误很多1下载指定版本我常用的版本3.3.0,2不同版本中的坑2.1在3.0之后版本配置entry和output路劲不再支持相对路径只能使用__dirname拼接成的绝对路径)varpath=require(‘path’);path.join(__dirname,”)2.2在版本4之后…

    2022年8月10日
    13
  • 利用Aliddns进行端口映射,外网可以使用域名访问,在公司内网用域名访问不通。

    利用Aliddns进行端口映射,外网可以使用域名访问,在公司内网用域名访问不通。这几天在公司的路由器上做了Aliddns,对公司的内部网络的一些服务映射到公网,在家里就可以访问到公司的一些服务。出现了一个问题:在外网利用域名+端口号可以正常访问到公司的服务,在公司内网的时候访问却没办法利用域名访问,只能用IP才能访问到相关服务找了一些资料,总结原因如下:例:在公司内网访问:访问者:代号A被访问者:代号B路由器:代号R由于在做DDNS时,在路由器上会把B绑定为公网…

    2022年6月6日
    36
  • 线程的IsBackground属性「建议收藏」

    线程的IsBackground属性「建议收藏」.Net的公用语言运行时(CommonLanguageRuntime,CLR)能区分两种不同类型的线程:前台线程和后台线程。这两者的区别就是:应用程序必须运行完所有的前台线程才可以退出;而对于后台线程,应用程序则可以不考虑其是否已经运行完毕而直接退出,所有的后台线程在应用程序退出时都会自动结束。.net环境使用Thread建立的线程默认情况下是前台线程,即线程属性IsBackground=

    2022年10月17日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号