快速排序算法动图演示及解析2024版(附Java代码实现)

548 篇文章 1 订阅
订阅专栏

3、图解快速排序算法

==========

我们以[ 8,2,5,0,7,4,6,1 ]这组数字为例来进行演示

首先,我们随机选择一个基准值:

快速排序1

与其他元素依次比较,大的放右边,小的放左边:

快速排序2

然后我们以同样的方式排左边的数据:

快速排序3

继续排 0 和 1 :

快速排序4

由于只剩下一个数,所以就不用排了,现在的数组序列是下图这个样子:

快速排序5

右边以同样的操作进行,即可排序完成。

4、快速排序算法Java代码实现

================

1//Java 代码实现

2public class QuickSort implements IArraySort {

3

4 @Override

5 public int[] sort(int[] sourceArray) throws Exception {

6 // 对 arr 进行拷贝,不改变参数内容

7 int[] arr = Arrays.copyOf(sourceArray, sourceArray.length);

8

9 return quickSort(arr, 0, arr.length - 1);

10 }

11

12 private int[] quickSort(int[] arr, int left, int right) {

13 if (left < right) {

14 int partitionIndex = partition(arr, left, right);

15 quickSort(arr, left, partitionIndex - 1);

16 quickSort(arr, partitionIndex + 1, right);

17 }

18 return arr;

19 }

20

21 private int partition(int[] arr, int left, int right) {

22 // 设定基准值(pivot)

23 int pivot = left;

24 int index = pivot + 1;

25 for (int i = index; i <= right; i++) {

26 if (arr[i] < arr[pivot]) {

27 swap(arr, i, index);

28 index++;

29 }

30 }

31 swap(arr, pivot, index - 1);

32 return index - 1;

33 }

34

35 private void swap(int[] arr, int i, int j) {

36 int temp = arr[i];

37 arr[i] = arr[j];

38 arr[j] = temp;

39 }

40

41}

5、单边扫描

======

快速排序的关键之处在于切分,切分的同时要进行比较和移动,这里介绍一种叫做单边扫描的做法。

我们随意抽取一个数作为基准值,同时设定一个标记 mark 代表左边序列最右侧的下标位置,当然初始为 0 ,接下来遍历数组,如果元素大于基准值,无操作,继续遍历,如果元素小于基准值,则把 mark + 1 ,再将 mark 所在位置的元素和遍历到的元素交换位置,mark 这个位置存储的是比基准值小的数据,当遍历结束后,将基准值与 mark 所在元素交换位置即可。

代码实现:

public static void sort(int[] arr) {

sort(arr, 0, arr.length - 1);

}

private static void sort(int[] arr, int startIndex, int endIndex) {

if (endIndex <= startIndex) {

return;

}

//切分

int pivotIndex = partitionV2(arr, startIndex, endIndex);

sort(arr, startIndex, pivotIndex-1);

sort(arr, pivotIndex+1, endIndex);

}

private static int partition(int[] arr, int startIndex, int endIndex) {

int pivot = arr[startIndex];//取基准值

int mark = startIndex;//Mark初始化为起始下标

for(int i=startIndex+1; i<=endIndex; i++){

if(arr[i]<pivot){

//小于基准值 则mark+1,并交换位置。

mark ++;

int p = arr[mark];

arr[mark] = arr[i];

arr[i] = p;

}

}

//基准值与mark对应元素调换位置

arr[startIndex] = arr[mark];

arr[mark] = pivot;

return mark;

}

6、双边扫描

======

另外还有一种双边扫描的做法,看起来比较直观:我们随意抽取一个数作为基准值,然后从数组左右两边进行扫描,先从左往右找到一个大于基准值的元素,将下标指针记录下来,然后转到从右往左扫描,找到一个小于基准值的元素,交换这两个元素的位置,重复步骤,直到左右两个指针相遇,再将基准值与左侧最右边的元素交换。

我们来看一下实现代码,不同之处只有 partition 方法:

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

那么如何才能正确的掌握Redis呢?

为了让大家能够在Redis上能够加深,所以这次给大家准备了一些Redis的学习资料,还有一些大厂的面试题,包括以下这些面试题

  • 并发编程面试题汇总

  • JVM面试题汇总

  • Netty常被问到的那些面试题汇总

  • Tomcat面试题整理汇总

  • Mysql面试题汇总

  • Spring源码深度解析

  • Mybatis常见面试题汇总

  • Nginx那些面试题汇总

  • Zookeeper面试题汇总

  • RabbitMQ常见面试题汇总

JVM常频面试:

Redis高频面试笔记:基础+缓存雪崩+哨兵+集群+Reids场景设计

Mysql面试题汇总(一)

Redis高频面试笔记:基础+缓存雪崩+哨兵+集群+Reids场景设计

Mysql面试题汇总(二)

Redis高频面试笔记:基础+缓存雪崩+哨兵+集群+Reids场景设计

Redis常见面试题汇总(300+题)

Redis高频面试笔记:基础+缓存雪崩+哨兵+集群+Reids场景设计
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》 点击传送门即可获取!
]

Mysql面试题汇总(一)

[外链图片转存中…(img-YZLCpfMb-1712922351965)]

Mysql面试题汇总(二)

[外链图片转存中…(img-2YhV60nW-1712922351965)]

Redis常见面试题汇总(300+题)

[外链图片转存中…(img-uOA4jo2B-1712922351966)]
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》 点击传送门即可获取!

快速排序算法动图演示解析2021Java代码实现
qq_38082146的博客
04-06 8339
1、快速排序算法实现方式 快速排序的核心思想是分治法,分而治之。它的实现方式是每次从序列中选出一个基准值,其他数依次和基准值做比较,比基准值大的放右边,比基准值小的放左边,然后再对左边和右边的两组数分别选出一个基准值,进行同样的比较移动,重复步骤,直到最后都变成单个元素,整个数组就成了有序的序列。 简单概括如下: 从数列中挑出一个元素,称为 “基准”(pivot); 重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退
JavaScript界面演示 快速排序
水神
04-21 642
不管用什么语言, 思想都一样 做这个首先的会快速排序,这里不解释了,只是走出页面效果 注意:  如果把一条一条div放入数组,那么div交换位置的时候, 注意数组的处理,需要保存左面或右边的left值, 一边下次while的left定位 html 初始化 开始 先沾出来 数组
算法-快速排序演示
charly
06-08 370
快速排序 快速排序是对冒泡排序的一种改良。 排序原理: 1、首先设定一个分界值,通过该分界值将数组分成左右两部分 2、将大于或等于分界值的数据放到数组右边,小于分界值的数据放到数组的左边。此时左边部分中各元素都小于或等于分界值,而右边部分中各元素都大于或等于分界值 3、然后,左边或右边的数据可以独立排序。对于左侧的数组数据,又可以取一个分界值,将该部分数据分成左右两部分,同样在左边放置较小值,右边放置较大值。右侧的数组数据也可以做类似处理。 4、重复上述过程,可以看出,这是一个递归定义。通过递归将左侧部分排
快速排序的动画演示(推荐)
03-10
快速排序动画演示快速排序动画演示快速排序动画演示
快速排序-flash演示
11-16
快速排序-flash演示 可自己输入数据.......
快速排序算法动图演示解析2021Java代码实现),springboot集成kafka教程
ddd22333的博客
12-18 671
3、图解快速排序算法 ========== 我们以[ 8,2,5,0,7,4,6,1 ]这组数字为例来进行演示 首先,我们随机选择一个基准值: 与其他元素依次比较,大的放右边,小的放左边: 然后我们以同样的方式排左边的数据: 继续排 0 和 1 : 由于只剩下一个数,所以就不用排了,现在的数组序列是下图这个样子: 右边以同样的操作进行,即可排序完成。 4、快速排序算法Java代码实现 ================ 1//Java 代码实现 2public class QuickSort im.
十大经典排序算法(C++、Java实现)动图演示代码解析-冒泡排序、选择排序、插入排序、快速排序、堆排序、希尔排序、归并排序、计数排序、桶排序、基数排序
SmallBottle-CGWLMX的博客
09-10 2845
和我的LeetCode系列源码放到一起。做IT行业,不管是测试、开发、运维等等,或简单或复杂的算法是必不可少的,也是大家面试工作中的必要环节,这个专栏开始和大家一起来研究著名的LeetCode,里边有上千种最常见的算法,面试工作出现几率很高,值得掌握研究,每次完成博客更新我会同步更新我的个人Github上的代码,每个算法都可以直接运行调试以供掌握,GitHub地址:https://github.c...
Java经典排序算法快速排序动图演示排序过程
m0_69526738的博客
05-08 267
printer(array); System.out.println(“-”); } swap(array, low, left); printer(array); System.out.println(“–”); quickSort(array, low, left - 1); printer(array); System.out.println(“—”); quickSort(array, left + 1, high); printer(array); System.out.println(“----
十大经典排序算法java实现、配图解,源码)
pythonxxoo的博客
03-03 2071
Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/course/detail/35475 前言: 本文章主要是讲解我个人在学习Java开发环境的排序算法时做的一些准备,以及个人的心得体会,汇集成本篇文章,作为自己对排序算法理解的总结与笔记。 内容主要是关于十大经典排序算法的简介、原理、动静态图解和源码实现的分析。 对于一名程序员来讲,我们都知道数据结构与算法起初是用
冒泡排序法
fengkuang7369的专栏
10-22 490
冒泡排序法 1. 工作原理 找到最后一个,依次往前 1.1 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 1.2 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。 1.3 针对所有的元素重复以上的步骤,除了最后一个。 1.4 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较 2. 时间复杂度 O
快速排序Quicksort演示
09-11
日本程序员norahiko,写了一个排序算法的动画演示,非常有趣。排序算法(Sorting algorithm)是计算机科学最古老、最基本的课题之一。要想成为合格的程序员,就必须理解和掌握各种排序算法。 目前,最常见的排序算法大概有七八种,其中"快速排序"(Quicksort)使用得最广泛,速度也较快。它是图灵奖得主C. A. R. Hoare(1934--)于1960时提出来的
快速排序算法演示(PPT).rar
11-27
自己做的快速排序算法演示,是根据代码做成的PPT,里面有代码!PPT会一步一步分解排序算法,可以对照里面的代码进行查看。
快速排序演示视频.rar
08-23
无水印! !!!!原创这是基于gif动画实现快速排序无水印的动画演示,无需任何积分,欢迎大家下载使用!好的东西就是要共享
快速排序算法java实现
11-24
详细解释了快速排序java实现.里面有代码,还有注释说明
快速排序图形界面演示程序
11-17
使用GUI实现快速排序图形界面效果,演示快速排序的基本思想。
看动画学算法之:排序-快速排序
阿里云云栖号
09-17 981
简介:快速排序也采用的是分而制之的思想。那么快速排序和归并排序的区别在什么地方呢? 归并排序是将所有的元素拆分成一个个排好序的数组,然后将这些数组再进行合并。 而快速排序虽然也是拆分,但是拆分之后的操作是从数组中选出一个中间节点,然后将数组分成两部分。 左边的部分小于中间节点,右边的部分大于中间节点。 然后再分别处理左边的数组合右边的数组。 简介 快速排序也采用的是分而制之的思想。那么快速排序和归并排序的区别在什么地方呢? 归并排序是将所有的元素拆分成一个个排好序的数组,然后将这些数组再进行合并。 .
Java 快速排序算法 演示
Hunnu
08-21 206
Blog is from this site:http://baike.baidu.com/view/19016.htm?fr=ala0_1   正文:   package com.morningstar.quicksort; import java.util.Random; public class QuickSort { public static void...
快速排序算法解析Java实现
Java实现快速排序,通常涉及以下步骤: 1. 选取基准元素。 2. 分区操作,将数组分为两部分。 3. 递归调用快速排序函数,分别处理左右子数组。 以下是一个简单的Java实现示例: ```java public class QuickSort { ...
写文章

热门文章

  • 2024 Java面试题大全(整理版)1000+面试题附答案详解,最全面详细 2454
  • 这可能是全网最详细的 Spring Cloud OAuth2 单点登录使用教程了,妈妈再也不用担心我被面试官吊打了! 2235
  • IntelliJ IDEA 集成 maven 开发环境搭建+创建Maven项目详细步骤 1388
  • VMvare 桥接模式无法联网、没有未桥接的主机网络适配器,无法将网络更改为桥接状态。 1307
  • 前端提高篇(七十六):geolocation地理位置信息 1236

分类专栏

  • 程序员 548篇

最新评论

  • 大厂速成算法笔记,Github上已收获近60K+star!力压LeetCode只为面试

    ha_lydms: 我很喜欢这个博客的风格和内容。作者总是能够以一种有趣和易懂的方式传达知识。

  • springboot学习笔记(十一)--MVC自动配置原理

    普通网友: 好文,细节很到位!【我也写了一些相关领域的文章,希望能够得到博主的指导,共同进步!】

  • IntelliJ IDEA创建基于maven的springboot项目

    全栈小5: 博主的文章总是深入浅出,让我不再觉得学习新知识困难。博主的付出和分享令人钦佩。谢谢你,继续前行!支持【IntelliJ IDEA创建基于maven的springboot项目,博主这篇文章,值得一看】

  • MQ的基本概念

    普通网友: 写的很详细,感谢博主的分享。【我也写了一些相关领域的文章,希望能够得到博主的指导,共同进步!】

  • Spring 源码第一篇开整!配置文件是怎么加载的?

    2401_84002594: 写的很详细,感谢博主的分享。【我也写了一些相关领域的文章,希望能够得到博主的指导,共同进步!】

最新文章

  • ProtoBuf 实际应用(java)
  • oh,老哥,是码友就来看这篇多线程,保证有意外的惊喜
  • Navicat自动备份数据库(1)
2024
05月 184篇
04月 291篇
03月 73篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

玻璃钢生产厂家奥体商场美陈装饰阜阳商场美陈制作机构成都欧式玻璃钢雕塑优势晋城铸铜玻璃钢彩绘雕塑厂家西安多彩玻璃钢雕塑批发厦门模压法玻璃钢雕塑销售康平玻璃钢雕塑厂家商场的Dp美陈哪里产的玻璃钢雕塑河南大型玻璃钢人物雕塑厂家河南卡通玻璃钢雕塑定制成都火山影院玻璃钢雕塑潮州美陈玻璃钢动物雕塑葫芦岛玻璃钢雕塑精选厂家开封肖像玻璃钢仿铜雕塑制作透明玻璃钢雕塑定做厂家商场美陈施工溧阳玻璃钢价值观雕塑必不可少的玻璃钢雕塑无锡杯子型玻璃钢花盆舟山玻璃钢卡通雕塑厂家北京玻璃钢金属雕塑介绍元宵节商场美陈人玻璃钢雕塑价格江苏水果玻璃钢雕塑图片河北通道商场美陈生产企业无极玻璃钢花盆好吗铜仁玻璃钢花盆厂家玻璃钢雕塑护木连云港frp玻璃钢雕塑香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化