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

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

相关推荐

  • 激光测距的原理与应用[通俗易懂]

    激光测距的原理与应用[通俗易懂]激光,英文名称为LightAmplificationbyStimulatedEmissionofRadiation(简称LASER),意思为原子受激辐射的光,故称激光,激光的产生原理,是原子中的电子吸收能量后从低能级跃迁到高能级,再从高能级回落到低能级的时候,所释放的能量以光子的形式放出,被引诱(激发)出来的光子束(激光)。激光与普通光源相比,具有单色性、高亮度、方向性等优势,被广泛应用于工业生产和科研实验等各个领域,激光测距便是其中应用较为广泛的一项技术。1.激光测距技术的特点激光测距

  • python舆情系统开发_什么是舆情

    python舆情系统开发_什么是舆情下面的这篇文章将手把手教大家搭建一个简单的股票舆情分析系统,其中将先通过金融界网站爬取指定股票在一段时间的新闻,然后通过百度情感分析接口,用于评估指定股票的正面和反面新闻的占比,以此确定该股票是处于利好还是利空的状态。1、环境准备本地环境:Python3.7IDE:Pycharm库版本:re2.2.1lxml4.6.3requests2.24.0aip4.15.5matplotlib3.2.1然后,导入需要用到的所有库:importrequest

  • QT/MFC面试题[通俗易懂]

    QT/MFC面试题[通俗易懂]1、QT信号槽机制的优缺点1)QT信号槽机制的引用精简了程序员的代码量2)QT的信号可以对应多个槽(但他们的调用顺序是随机),也可以多个槽映射一个信号3)QT的信号槽的建立和解除绑定十分自由4)信号槽同真正的回调函数比起来时间的耗损还是很大的,所有在嵌入式实时系统中应当慎用5)信号槽的参数限定很多例如不能携带模板类参数,不能出现宏定义等等

  • Reverse Integer

    Reverse Integer

    2021年12月15日
  • java json字符串转list集合

    java json字符串转list集合StringjsonString=”[{“plateNumber”:”1″,”holeNumber”:”A02″,”qcType”:”L”,”value”:”2.36″}”,{“plateNumber”:”1″,”holeNumber”:”A03″,”qcType”:”M”,”value”:”5.36″}]List<QcPlate>listQcPlate=newArr…

  • java基础菜鸟教程_java基础菜鸟教程大全,java入门「建议收藏」

    java基础菜鸟教程_java基础菜鸟教程大全,java入门「建议收藏」java这个词语相信大家都听的耳朵快要起茧了吧,就算是没学过编程的小伙伴也一定听说过java,谁让它如今几乎火遍大江南北呢。这次我们就来讲解一些常见的java基础,希望能够让你们更加了解java。java基本概念一、什么是程序?为了完成任务,执行一系列有序的指令的集合。指令:命令。二、Java程序设计2.1什么是Java?是撰写跨平台,面向对象的计算机语言。2.2Java能做什么?开发桌面应用…

发表回复

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

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