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

快速排序基本思路(通俗易懂+例子)「建议收藏」快速排序今天看到大神写的一篇快速排序的博客,肃然起敬,觉得原来快速排序这么简单下面进行简单的试试快速排序的基本思想是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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 基础教程:TCP连接的建立和释放

    基础教程:TCP连接的建立和释放

    2022年3月6日
    97
  • DropDownList1_SelectedIndexChanged不执行「建议收藏」

    DropDownList1_SelectedIndexChanged不执行「建议收藏」http://blog.sina.com.cn/s/blog_4ba152030100a6sr.html

    2022年7月18日
    13
  • sql server下载安装步骤(sql2005安装教程图解)

    sql server下载安装步骤(sql2005安装教程图解)SQLServer2017下载安装教程第一步:打开浏览器,在浏览的搜索框中我们输入“SQLServer”。如图,会匹配出中文两条微软官方下载页面(一个页面内容是英文、一个页面内容是中文)。这里我们以中文的为例。第二步:点击进入下载页面后,可以看到如图所示页面,我们不要着急点击下载,因为这些SQLServer只能试用180天(大家从介绍中可以看到)。第三步:我们将网页下滑,可以看到…

    2022年4月18日
    418
  • linux ubuntu 关闭防火墙命令,Linux下开启/关闭防火墙命令「建议收藏」

    iptables用于过滤数据包,属于网络层防火墙.firewall能够允许哪些服务可用,那些端口可用….属于更高一层的防火墙。firewall的底层是使用iptables进行数据过滤,建立在iptables之上。1)永久性生效,重启后不会复原开启:chkconfigiptableson关闭:chkconfigiptablesoff2)即时生效,重启后复原开启:service…

    2022年4月9日
    210
  • c语言fread函数的功能_C语言strchr

    c语言fread函数的功能_C语言strchr目录一.fread函数简介二.fread函数使用三.猜你喜欢零基础C/C++学习路线推荐:C/C++学习目录>>C语言基础入门一.fread函数简介C语言fread函数用于读取文件中的数据到指定缓冲区中,fread函数声明如下:/**描述:关闭文件**参数:*[out]ptr:缓冲区,用于存放读取到的数据*[in]size:每个元素的大小(单位是字节)*[in]nmemb:要读取的元素个数*[in

    2025年8月27日
    7
  • 激光slam综述_开源算法是什么意思

    激光slam综述_开源算法是什么意思点击上方“AI算法修炼营”,选择加星标或“置顶”标题以下,全是干货前面的话好久没有更新SLAM系列的文章了,前面我们讲到了激光SLAM技术。基于激光雷达的同时定位与地图构建技术(simu…

    2022年8月23日
    4

发表回复

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

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