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

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


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)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • 飞鸽传书:谈谈RenderControl手动调用「建议收藏」

    飞鸽传书:谈谈RenderControl手动调用「建议收藏」有些网页需要在后台动态创建服务器控件,并且将控件的html代码写入到指定的HtmlTextWriter.如果仅是调用RenderControl方法能够将服务器控件的html内容输出,但它并不会执行OnPreRender,但是通常服务器控件都重写了OnPreRender方法,实现了许多重要的功能.我们不能将其舍弃啊.

    2022年7月21日
  • cd4与cd8比值的意义 化疗后_艾滋病人的cd8高好还是低好

    cd4与cd8比值的意义 化疗后_艾滋病人的cd8高好还是低好正常情况下CD4/CD8比值介于1.5—2.5之间,如CD4是每微升血750个,CD8是每微升血460个,这样两者的比值就是1.63。虽然95%的正常人CD4/CD8的比值都在1以上,但是也有一些正

    2022年8月1日
  • js匿名函数作为函数参数

    js匿名函数作为函数参数由衷的感叹,js真是烦。学到现在,渐渐理解了什么是:语言都是通用的,没有好不好,只有擅长不擅长。继承,多态,甚至指针,c能实现,c++,java有,javascript(和java是雷锋和雷峰塔的区别,名字上不知道坑了多少人)也能变通实现。温故知新,今天又回味了一遍,匿名函数作为函数参数。代码很短,五脏俱全。functiont

    2022年10月3日
  • Java多线程:线程死锁

    Java多线程:线程死锁

    2021年11月16日
  • 【最全】软件测试基础理论选择题(含答案)[通俗易懂]

    【最全】软件测试基础理论选择题(含答案)[通俗易懂]一、选择题(每题1分,共90分)1、软件测试的目的是()A、试验性运行软件B、发现软件错误C、证明软件正确D、找出软件中全部错误【答案】B2、下面说法正确的是()A、经过测试没有发现错误说明程序正确B、测试的目标是为了证明程序没有错误C、成功的测试是发现了迄今尚未发现的错误的测试D、成功的测试是没有发现错误的测试【答案】C3、软件测试中白盒法是通过分析程序的…

    2022年6月12日
  • Jmeter 参数化实现

    Jmeter 参数化实现在测试过程中,我们经常遇到需要根据需求动态操作数据的情况,常规的固定数据无法满足我们的需要,这个时候,我们可以通过jmeter提供的参数化组件来实现动态的获取数据、改变数据。Jmeter中常用的参数化方式jmeter为我们提供了四种实现参数化的方式,分别是【CSVDataSetConfig】(数据集配置)组件、【用户参数】组件、【用户定义的变量】组件和【函数】组件,四种方式都有…

    2022年6月30日

发表回复

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

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