快速排序基本思路(通俗易懂+例子)「建议收藏」

快速排序基本思路(通俗易懂+例子)「建议收藏」快速排序今天看到大神写的一篇快速排序的博客,肃然起敬,觉得原来快速排序这么简单下面进行简单的试试快速排序的基本思想是1、先从数列中取出一个数作为基准数2、分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边3、再对左右区间重复第二步,直到各区间只有一个数概括来说为挖坑填数+分治法下面举例来进行说明,主要有三个参数,i为区间的开始地址,j为区间

大家好,又见面了,我是你们的朋友全栈君。

快速排序

内推日常实习社招也可以简历发送到我邮箱,长期接受简历,部门做搜索产品研发,主要php和go语言!
2022百度提前批招聘】填写内推码可以免专业笔试,部门直接发起面试,有想去的部门可以发送简历到 927①56零36@qq.com 定向内推,本次招聘不影响正常校招流程,相当于多一次机会,赶紧填写内推码【am8eh4】试试吧!
在这里插入图片描述

= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
今天看到大神写的一篇快速排序的博客,肃然起敬,觉得原来快速排序这么简单
下面进行简单的试试

快速排序的基本思想是

1、先从数列中取出一个数作为基准数

2、分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边

3、再对左右区间重复第二步,直到各区间只有一个数

概括来说为 挖坑填数+分治法

下面举例来进行说明,主要有三个参数,i为区间的开始地址,j为区间的结束地址,X为当前的开始的值

第一步,i=0,j=9,X=21

0 1 2 3 4 5 6 7 8 9
21 32 43 98 54 45 23 4 66 86

第二步,从j开始由,后向前找,找到比X小的第一个数a[7]=4,此时i=0,j=6,X=21
进行替换

0 1 2 3 4 5 6 7 8 9
4 32 43 98 54 45 23 21 66 86

第三步,由前往后找,找到比X大的第一个数a[1]=32,此时i=2,j=6,X=21

0 1 2 3 4 5 6 7 8 9
4 21 43 98 54 45 23 32 66 86

第四步,从j=6开始由,由后向前找,找到比X小的第一个数a[0]=4,此时i=2,j=0,X=21,发现j<=i,所以第一回结束

可以发现21前面的数字都比21小,后面的数字都比21大
接下来对两个子区间[0,0]和[2,9]重复上面的操作即可

下面直接给出过程,就步详细解说了

i=2,j=6,X=43

0 1 2 3 4 5 6 7 8 9
4 21 43 98 54 45 23 32 66 86

i=4,j=6,X=43

0 1 2 3 4 5 6 7 8 9
4 21 32 98 54 45 23 43 66 86

i=4,j=5,x=43

0 1 2 3 4 5 6 7 8 9
4 21 32 43 54 45 23 98 66 86

i=5,j=5,x=43

0 1 2 3 4 5 6 7 8 9
4 21 32 23 43 45 54 98 66 86

然后被分为了两个子区间[2,3]和[5,9]

…最后排序下去就是最终的答案

0 1 2 3 4 5 6 7 8 9
4 21 23 32 43 45 54 66 86 98

总结:

1.i =L; j = R; 将基准数挖出形成第一个坑a[i]。

2.j–由后向前找比它小的数,找到后挖出此数填前一个坑a[i]中。

3.i++由前向后找比它大的数,找到后也挖出此数填到前一个坑a[j]中。

4.再重复执行2,3二步,直到i==j,将基准数填入a[i]中。


代码

class Solution { 
   
	public void sort(int left,int right,int[] array) { 
   
		if (left>=right) return ;
		int start=left;
		int end=right;
		int flag=left;
		while(left<right) { 
   
			while ((left<right)&&(array[right]>=array[flag])) { 
   
				right--;
			}
			if (array[right]<array[flag]) { 
   
				int tmp=array[right];
				array[right]=array[flag];
				array[flag]=tmp;
				flag=right;
			}
			while ((left<right)&&(array[left]<=array[flag])) { 
   
				left++;
				}
			if (array[left]>array[flag]) { 
   
				int tmp=array[left];
				array[left]=array[flag];
				array[flag]=tmp;
				flag=left;
			}
		}
		sort(start, left-1, array);
		sort(left+1, end, array);
	}
}

分享一个比较牛逼的学习java的网站,基础知识和架构等都有,连接如下:
http://how2j.cn?p=54321
在这里插入图片描述

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

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

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


相关推荐

  • 初学者java编程软件_编写python的软件

    初学者java编程软件_编写python的软件初学者刚刚入门学习需要用到一些开发工具,初学Java一般从控制台应用程序开发开始的,在cmd下调试,为你的电脑搭建好开发环境,需要在网站上下载JDK,安装完成后调试成功就可以开始写你的Java程序了。1.IDEAJava编程软件业界最好的Java开发工具之一,支持常见的智能补全、语法提示、代码高亮等基本功能。除此之外,还支持代码审查、代码重构、CSV整合、JUnit、GUI设计等高级功能,集成了Maven和Gradle构建工具,项目管理更加方便,因此使用的公司和…

    2022年9月23日
    4
  • centos6 7 zabix grafana安装配置

    centos6 7 zabix grafana安装配置一 安装 zabbix0 关闭 selinuxvim etc selinux configSELINU disabled 设置后需要重启才能生效 shell gt setenforce0 临时关闭 shell gt getenforce 检测 selinux 状态 1 Zabbix 在 CentOS 基本源里不可获得或者获得到的都是老版本的 因此必须配置 Zabbix 官方 r

    2025年7月30日
    5
  • Thinkpad x201i 拆机清理风扇「建议收藏」

    Thinkpad x201i 拆机清理风扇「建议收藏」Thinkpadx201i拆机清理风扇教程笔记本散热风扇使用时间长了就累积很多灰尘,堵塞出风口,从而大幅降低散热效果。因此有必要对其清理。要彻底清理风扇灰尘,需要拆机方可。首先要把笔记本的电池取下。电池取下后,我们就可以开始拆卸内存了,首先要把内存外壳拆下。拆下内存盖后,我们只要把两边的卡扣松动,轻轻一拔即可把内存取下。这款笔记本的硬盘仓很隐蔽,不过在D面还是有明显的图标提示,拧下螺丝和卡扣,即可看到硬盘。硬盘盖拆下来之后,只需用力的拔出黑带即可把硬盘取下。…

    2022年6月27日
    95
  • Java内存管理-程序运行过程(一)「建议收藏」

    勿在流沙住高台,出来混迟早要还的。做一个积极的人编码、改bug、提升自己我有一个乐园,面向编程,春暖花开!相信在做Java开发的伙伴一定知道 JVM(Java Virtual Machine(Java虚拟机)!本系列会开启对JVM相关的知识的探索和总结,让我们一起踏入JVM的学习之旅中,去了解和发现更加精彩的Java世界! 正如奥古斯特·罗丹 说过:世界上不是缺少美,而是缺少发现美的眼…

    2022年2月28日
    51
  • 免费mysql数据库空间_mysql数据库空间满了

    免费mysql数据库空间_mysql数据库空间满了申请地址:https://db4free.net/signup.php在这里注册完并且邮箱认证后即可使用。

    2022年4月19日
    62
  • redis 击穿 穿透_redis穿透击穿雪崩

    redis 击穿 穿透_redis穿透击穿雪崩本文分享自华为云社区《【高并发】什么是缓存穿透?击穿?雪崩?如何解决?》,作者:冰河。缓存穿透首先,我们来说说缓存穿透。什么是缓存穿透呢?缓存穿透问题在一定程度上与缓存命中率有关。如果我们的缓存设计的不合理,缓存的命中率非常低,那么,数据访问的绝大部分压力都会集中在后端数据库层面。什么是缓存穿透?如果在请求数据时,在缓存层和数据库层都没有找到符合条件的数据,也就是说,在缓存层和数据库层都没有命中数据,那么,这种情况就叫作缓存穿透。我们可以使用下图来表示缓存穿透的现象。造成缓

    2025年11月16日
    2

发表回复

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

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