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

史上最详细图解快速排序的方法_快速排序的基本步骤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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • leetcode 三数之和_leetcode 三数之和

    leetcode 三数之和_leetcode 三数之和原题链接给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。注意:答案中不可以包含重复的三元组。示例 1:输入:nums = [-1,0,1,2,-1,-4]输出:[[-1,-1,2],[-1,0,1]]示例 2:输入:nums = []输出:[]示例 3:输入:nums = [0]输出:[] 提示:0 <= nums.length <= 300

  • Ubuntu16.04编译安装BusyBox「建议收藏」

    Ubuntu16.04编译安装BusyBox「建议收藏」简述Ubuntu16.04LTS编译安装BusyBox,出现问题及解决方案。下载源码下载BusyBox源码选择一个扩展名为.tar.bz2文件下载本例中使用busybox-1.27.2.tar.bz2解压在源码所在位置右键在此打开终端,输入解压命令,文件名与自己所下载版本文件对应tar-jxvfbusybox-1.27.2.tar.bz2解压后当前文件夹生成一个文件夹,进入到解压后

  • ubuntu安装opencv的正确方法

    ubuntu安装opencv的正确方法本文介绍的是如何安装ubuntu下C++接口的opencv1.安装准备:1.1安装cmakesudoapt-getinstallcmake1.2依赖环境sudoapt-getinstallbuild-essentiallibgtk2.0-devlibavcodec-devlibavformat-devlibjpeg-devlibswscale-devlib…

  • linux之文本编辑器

    linux之文本编辑器【目标】管理员在进行系统操作的时候,不可避免地会对文本进行修改,如进行各种服务程序配置文件的改动,使程序对用户提供不同的服务效果。在本章我们向大家介绍Linux上常见的编辑器ed、vi、emacs,同时以vi为例,讲解Linux中的文本编辑,为大家成为优秀的系统管理员打下基础。 【重点内容】Ø       Linux编辑器简介Ø       vi的打开和退出Ø

  • 编写js程序实现n的阶乘_javascript矩阵算法

    编写js程序实现n的阶乘_javascript矩阵算法定义一个函数,算出n的阶乘/**定义一个函数,算出n的阶乘*/letx=Number(window.prompt(‘请输入求阶乘的数:’));console.log(jCheng(x))functionjCheng(x){ returnx<2?1:x*jCheng(x-1)}

  • 在node.js中使用COOKIE

    node.js中如何向客户端发送COOKIE呢?有如下两个方案:一、使用response.writeHead,代码示例://设置过期时间为一分钟1vartoday=newDate();

    2021年12月21日

发表回复

您的电子邮箱地址不会被公开。

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