快排改进版——插入 三分 九分 双指针综合版

双指针法实现快速排序 如果子数组已经足够小(例如,只包含一个元素),那么这个子数组已经是排序好的。​ 快速排序是一种非常高效的排序算法,它的基本思想是“分而治之”。也就是说,如果我们需要对一个数组进行排序,可以。相遇的时候,程序可能会交换一个元素与自身,虽然这不会影响排序的结果,但是这是一个不必要的操作。两个指针会分别从数组的两端开始搜索,直到找到需要交换的元素。相遇时,我们需要确定这个位置在下一次递归中属于哪个子数组。及其左边的元素应该属于左边的子数组,而。,所以这两个表达式的效果是一样的。,这样在循环的第一次迭代中, 阅读详情

博主查看别人博客以及Arrays.sort()总结出来的快排改进版

public class QucikSort {

	public static void main(String[] args) {
		//int a[]={9,8,6,1,2,5,4,8,3,7,1,2,0,15,12,11,13,18,9,7,5,6,4,12,17,20};
		int a[]={20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0};
		quickSort(a,0,a.length-1);
		output(a);

	}
	private static void output(int[] a) {
		for(int val:a)
			System.out.print(val+" ");
		
	}
	public static void quickSort(int[] a,int left,int right){
		if(a.length==0||left<0||right<0||left>right)
			return;
		int len=right-left+1;
		
		if(len<7){
			for(int i=left;i<=right;i++){
				int temp=a[i]; 
				int j=i-1;
				for(;j>=left&&a[j]>=temp;j--)
					a[j+1]=a[j];
				a[j+1]=temp;
			}
			return ;
		}
		int l=left;
		int m=left+len>>1;
		int n=left+len-1;
		int s=len/8;
		if(len>40){
			
			l = med3(a, l, l + s, l + 2 * s); // 取样左端点3个数并得出中数
            m = med3(a, m - s, m, m + s); // 取样中点3个数并得出中数
            n = med3(a, n - 2 * s, n - s, n); // 取样右端点3个数并得出中数
		}
		m = med3(a, l, m, n);
		swap(a,left,m);
		
		int x=a[left];
		int i=left;
		int j=right;
		while(i<j){
			
			while(a[j]>=x) j--;
			if(i<j) a[i++]=a[j];
			while(a[i]<x)	i++;
			if(i<j)	a[j--]=a[i];
		}
		a[i]=x;
		quickSort(a,left,i-1);
		quickSort(a,i+1,right);
	}
	
	private static void swap(int[] a, int x, int y) {
		int temp=a[x];
		a[x]=a[y];
		a[y]=temp;
		
	}
	private static int med3(int x[], int a, int b, int c) {
        return x[a] < x[b] ? (x[b] < x[c] ? b : x[a] < x[c] ? c : a)
                : x[b] > x[c] ? b : x[a] > x[c] ? c : a;
    }
}


综合时如何插入scan_综合 | 优化控制 继续码综合这一趴,相关文章回顾:《综合 | 挑战与应对》《综合 | SDC 的读入与检查》《综合 | 设计读入与检查》《综合 | LEF, QRC, DEF》《综合 | 概述及 library 检查》。综合需要的输入,除了以上罗列的library, lef, QRC, RTL, SDC, DEF 之外,如果是多电压域设计还需要读入power intent 文件,也就是CPF/UPF, 对... 阅读详情

相关推荐

快速排序--递归加双指针实现( c ++)

原理 对于一段无序数组,如何实现快速排序? 我们可以定义两个指针 i 和 j 来分别指向数组的左右两端,再定义一个值 x 来使得值 x 左边的数全都小于等于 x, 值 x 右边的数都大于等于 x。 这样我们再利用递归来分别对 x 的左右两端进行操作,即可实现整段数组的排序。 实现---分三步 第一步:确定 x 先定义一个值 x,值 x 的定义我推荐用三数中值分割法。即在数组的首元素、中间元素和最后一个元素三者中选择中间值。这样的好处可以避免产生边界问题。 举个例子:给定一个数组 q内含有的.

weixin_51460193的博客 1014

快速排序(双指针法)

由于while(i < j)循环结束时,i>=j,i=j时没问题,当i>j时,且只剩下两个元素,由于x = nums[l],会一直死循环。当两指针即将相遇时,停止,此时q[i]的左边全部小于x,q[j]的右边全部大于x,j从指向去q[r]开始向前移动,如果q[j]>x,就继续向前移动,否则,停止。右侧q[r],令它为x。i从指向q[l]开始向后移动,如果q[i]

qq_34888036的博客 1133

【AutoDL】使用云服务器跑深度学习代码

1.算力市场 租用服务器,选择自己心仪的服务器2.镜像可以选择一些基础的镜像,社区镜像里是git上有的环境。3.上传文件在文件存储中,选择上传的区,在右边点击上传,选择自己的文件上传到云服务器中。

weixin_45768644的博客 3704

1.快速排序(双指针法)

算法思想是什么? 分治 算法步骤是什么? 1.选择数组中的第一个元素arr[startIndex]作为轴(pivot) 2.左指针为left,从最左边开始寻找第一个比pivot大的数 3.右指针为right,从最右面的一个元素开始向左寻找第一个小于等于pivot的数值 4.经过2,3两个步骤后,将会出现以下两种情况 ​ (1):left和right没有相遇,此时进行交换,swap(arr,left,right); ​ (2):left和right相遇,做swap(arr,startIndex

Geometry2的博客 2424

T-Box功能详解及应用

T - BOX,其全称为 Telematics Box,作为远程 / 车载通信模块,是一款集车身网络与无线通讯功能于一体的智能终端设备。它充当了多媒体车机与 TSP(汽车远程服务提供商)以及互联网之间的无线路由器角色,为用户创造了远程访问的可能。用户借助T - BOX能够对车辆配备的各个 ECU(电子控制单元)进行远程操控,包括远程启动或停止发动机开启或关闭空调天窗后备箱门车门,以及实现闪灯鸣笛等功能。

wgl110110的博客 5644

微信小程序导航栏滑动一定距离后固定到顶部

接上一篇文章的内容,通常在一个页面中部会有一个导航栏查看不同的内容,这篇文章旨在实现在页面下滑的过程中导航栏自动固定到顶部以便我们阅读过程中的切换。 下滑一段距离后自动固定到顶部 首先,思考这个功能应该是怎么实现的: 在页面下滑的过程中,我们希望系统应当能识别下滑了多少距离,当原本的导航栏逐渐被遮住以后(遮住意味着下滑了特定距离),触发这个功能,执行另一种样式,将导航栏固定在页面顶端,同时如果我们将页面往上滑,系统能识别到原来的导航栏能露出来了(即距离顶端的高度小于一个特定的值),这时候又执行最初的样式

Oblivision_Geek的博客 4033

c语言快速排序(霍尔法、挖坑法、双指针法)图文详解

快速排序的三种方法及图文详解

yao_yao0524的博客 3685

stm32H743IIT6 cubemx HAL USB UVC摄像头基础

stm32性能已经很强了, 可以驱动ov5640摄像头, 所以可以把摄像头接在stm32上, 当作一个摄像头驱动器, 连接到电脑上 开发环境: stm32cubemx 6.0.1 单片机: 自己做的stm32h743iit6核心板,兼容正点原子 学习资料: 圈圈学USB 鱼鹰谈单片机 从零开始学习USBhttps://to-run-away.blog.youkuaiyun.com/article/details/85038393 整个项目是基于CDC串口上修改 1 stm32 USB 代码概览 ..

紫枫洛天的博客 7753

排序——快速排序

快排又被称为霍尔排序,其本质类似于二叉树的前序遍历(根->左->右)。

chenbj0205的博客 1377

SMOKE 3D:从 Python 到 C++ 实现车辆与行人单目 3D 视觉识别在 RK3588 上的深度部署

SMOKE的网络结构通常基于高性能的骨干网络(如DLA-34,您使用的模型就是基于此),通过编码器-解码器架构来提取特征。输入:RGB图像(本项目为骨干网络:用于特征提取。检测头热力图分支:预测关键点热力图。通常在热力图上进行NMS来找到局部最大值,即潜在的关键点位置。回归分支:对于每个关键点位置,预测上述的8维3D属性向量。分类分支:预测每个关键点对应的物体类别。置信度分支:预测每个关键点的置信度。本教程详细介绍了SMOKE单目3D目标检测模型在RK3588上的部署。我们从SMOKE的。

LXY_LOVE36的博客 439

YOLOv4目标检测算法——通俗易懂的解析

YOLOv4目标检测算法——通俗易懂的解析

chase 7136

快速排序---双指针法

4、在循环中,如果a[cur]小于基准值a[keyi],则将prev指针右移一位,并交换a[prev]和a[cur]的值,保证prev指针之前的元素都小于基准值。7、最后,将基准值a[keyi]和a[prev]交换位置,将基准值放在正确的位置上。同样实现了将数据分成两部分,左边的元素都小于等于基准值,右边的元素都大于基准值。3、进入一个循环,循环条件是cur <= right,即cur指针没有越界。2、定义一个变量keyi,用于保存基准值的下标,初始值为left。5、将cur指针右移一位。

m0_74917967的博客 466

【表面缺陷检测】基于yolov5的钢轨表面缺陷检测(附代码和数据集,Windows系统)

【表面缺陷检测】基于yolov5的钢轨表面缺陷检测(附代码和数据集,Windows系统)

学无止境、积少成多、厚积薄发 3986

快速排序学习

将选中的Key进行排序,小于key的放左边,大于Key的放右边,key放中间 之后将小于key的进行快排,大于key的进行快排,这样就是整体的快排了。right与left碰到,因为有一个为空,所以这里必定为空,所以将key填入即可,之后分别递归左边和右边。这时候,将0位的想象为空,或者说,我们选择key的时候就已经把他取出来了。核心思想,就是不符合条件的填到空中,所以移动的是不为空的那个指针。2个指针,一个指针在左边,一个指针在右边,key取第一个。这时候由于right是空,所以移动left。

qq_42265608的博客 560

PLC如何控制电子膨胀阀(暖通空调/制冷系统)

电子膨胀在冷水机空调系统里广泛采用,大部分空调系统都会有电子膨胀阀,但是电子膨胀阀的控制接口和普通电磁阀完全不同,所以想要PLC直接控制电子膨胀阀,还是比较麻烦的,电子膨胀阀可以理解为一个简易步进电机,体积非常小,线圈和转子部分可以分离。下面我们看下PLC如何控制电子膨胀阀。

RXXW_Dor的博客 4761

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

快速排序【双指针扫描】

快速排序【双指针扫描】【递归】

liuzimo15的博客 219

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

同时利用【递归法、三值取中法、双指针法】解决快速排序问题(深入浅出,逐层理解)

写在前面的话。

2301_78696436的博客 1589

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

史上最细快速排序讲解(hoare,挖坑,双指针, 非递归)

史上最细快速排序讲解(hoare,挖坑,双指针, 非递归),一篇博客带你学会所有快排算法思想!(入门必看!)

Jdxxwu的博客 1782

插入低层次网表或第三方IP网表

详见UG901第27页开始。

neufeifatonju的博客 2万+

1035 插入与归并(C++)

题目详情 1035 插入与归并 (25分) 根据维基百科的定义: 插入排序是迭代算法,逐一获得输入数据,逐步产生有序的输出序列。每步迭代中,算法从输入序列中取出一元素,将之插入有序序列中正确的位置。如此迭代直到全部元素有序。 归并排序进行如下迭代操作:首先将原始序列看成 N 个只包含 1 个元素的有序子序列,然后每次迭代归并两个相邻的有序子序列,直到最后只剩下 1 个有序的序列。 现给定原始序列和由某排序算法产生的中间序列,请你判断该算法究竟是哪种排序算法? 输入格式: 输入在第一行给出正整数

努力学习的DS 2万+

神级基础排序——快速排序

概念 快速排序是一种原地排序,只需要一个很小的栈作为辅助空间,空间复杂度为O(logN),所以适合在数据集比较大且无序的时候使用。实现方法有经典快排和双指针快排,本文介绍的是双指针快排的实现。 【注意】:快排的经典排序实现的partition过程其实就是荷兰国旗问题,不明白的或者不熟悉的可以先看一下荷兰国旗算法。本文的实现主要讲双指针法。 荷兰国旗算法:荷兰国旗问题&快排&BF...

god-jiang的博客 1009

排序算法之【快速排序】

快速排序是一种常用的排序算法,也是一种很高效的排序的,它是由Hoare于1962年提出的一种二叉树结构的交换排序方法。本篇文章我将带你深入了解快速排序。快速排序是一种极其高效的排序方法,从上述的分析快速排序使用的二分分治排序的方法,可以得出时间复杂度为O(N*logN),同时快速排序并不稳定,我们使用了各种方法来进行优化,使它的时间复杂度稳定在O(N*logN)。

2202_75605090的博客 2331

快速排序:双指针快排

【代码】快速排序:双指针快排。

努力努力再努力P 190

C++双指针快排算法

时间复杂度通常较低,很多情况下能达到线性时间复杂度O(n),避免了暴力解法中可能出现的双重循环导致的O(n^2)时间复杂度,提高了算法效率。

2401_86718044的博客 1963

快速排序算法(双指针+填坑法)

对于快速排序算法的理解,用分治法的思想,分别使用双指针和填坑法实现。

qq_75092124的博客 647

排序--快排--双指针法

快排双指针法的详细讲解及图文转化,和代码分析。

2301_81893652的博客 515
上一篇: 乐观锁和悲观锁学习笔记
versencoder
博客等级 码龄10年 30粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值