拉勾数据结构课之快速排序算法

电脑技巧:Hyper-V安装UOS操作系统图文教程 今天给大家分享微软官方Hyper-v虚拟机管理软件安装UOS操作系统图文教程,感兴趣的朋友也可以下载试一试,当然有啥问题也可以互相沟通交流! 阅读详情

快速排序算法:

实现代码一:

 /*快速排序
    以第一个数为基准点,把大于基准点的放在基准点右边,小于基准点的放在基准点左边。
    再把左边的当作一个新的数组1,右边的当作一个新数组2,分别重新选取新的数组1,2的基准点不断执行小于基准点的放左边,大于基准点的放右边
   不断划分左右数组序列,直到左右数组序列只剩一个数
    实现方法:
    定义两个哨兵i,j,j每次先从后往前找到第一个小于基准点的数,如果此时i,j,没有相遇,i在 j找到数后从前往后找到第一个大于基准点的数
    不断 重复该过程,直到i,j相遇,相遇点即为基准点应该所处的位置
    把基准点前后各划分为一个新的数组后重复1,2过程,直到形成的数组只有一个数*/
   public static void quickSort(int a[],int low,int high){
        if(low>high){//说明此时序列中只有一个数,可以退出递归
            return;
        }
        int i,j,key;
        i=low;
        j=high;
        key=a[low];
        while(i<j){
            while(i<j&&a[j]>=key){
                j--;
            }
            while(i<j&&a[i]<=key){
                i++;
            }
            if(i<j){
                int temp=a[i];
                a[i]=a[j];
                a[j]=temp;
            }
        }
        int temp=a[i];
        a[i]=a[low];
        a[low]=temp;
        quickSort(a,low,i-1);
        quickSort(a,i+1,high);
   }

实现代码二:

public void quickSortRecursion(int[] nums,int low,int high){
		if(low>=high) return;
		int p=getPartionValue(nums,low,high);
		quickSortRecursion(nums,low,p-1);
		quickSortRecursion(nums,p+1,high);
		
	}
	public int getPartionValue(int[] nums,int low,int high){
		 Random random = new Random();
		int s = random.nextInt(high)%(high-low+1) + low;
		swap(nums,s,high);
		int i=0,j=0;
		for(i=low,j=low;j<high;){
           //所注释的是对swap(nums,i++,j);过程的一个详细代码实现
			/*if(nums[j]<=nums[high]){
			  if(i!=j) swap(nums,i,j);
				i++;
				j++;
			}else{
			j++;
			}*/
			if(nums[j]<=nums[high])
				swap(nums,i++,j);
                //使用注释的代码请去掉j++;
                j++;
		}
			
		swap(nums,i,j);
		return i;
	}
	public void swap(int[] nums,int low,int high){
		int temp=nums[low];
		nums[low]=nums[high];
		nums[high]=temp;
	}

代码二相对代码一来说较难理解,其中的swap(nums,i++,j); 方法的具体过程是这样的:

假设数组中有2、1、7、9、5、8六个数,选取的基准点值假设为8,那么swap 方法流程如下:

i=0,j=0       nums[0]<nums[high]    swap(nums,0,0)

i=1,j=1      nums[1]<nums[high]    swap(nums,1,1)

i=2,j=2      nums[2]<nums[high]    swap(nums,2,2)

i=3,j=3      nums[3]>nums[high]   j=4

i=3,j=4      nums[4]<nums[high]    swap(nums,3,4) 此时数组变为 2、1、7、5、9、8 

i=4,j=5      j=high  退出循环     swap(nums,4,5)

此时数组变为 2、1、7、5、8、9  返回基准值8所应该在的正确位置4

递归继续进行上述操作。


复杂度分析:

时间复杂度:

最优情况:被选取出的基准值都为中间数 :T(n)=2*T(n/2)+O(n),所以最优情况为O(nlogn)

最坏情况:基准值为最大值或最小值:T(n)=T(n-1)+O(n),所以最坏情况为O(n*n)

空间复杂度:O(1)*logn=O(logn)

LeetCode 相关题目:

LeetCode 215 题:求数组中第k大的数

public int quickKsort(int[] nums,int low,int high,int k){
		int j=0;
		while(low<high){
			j=getPartionValue(nums,low,high);
			if(j==k-1) return nums[j];
			else if(j<k-1) low=j+1;
			else high=j-1;
		}
		return -1;
	}
public int getPartionValue(int[] nums,int low,int high){
		 Random random = new Random();
		int s = random.nextInt(high)%(high-low+1) + low;
		swap(nums,s,high);
		int i=0,j=0;
		for(i=low,j=low;j<high;j++){
			/*if(nums[j]<=nums[high]){
			  if(i!=j) swap(nums,i,j);
				i++;
				j++;
			}else{
			j++;
			}*/
			if(nums[j]<=nums[high])
				swap(nums,i++,j);
		
		}
			
		swap(nums,i,j);
		return i;
	}

 

 

LSTM+Transformer混合模型时间序列预测实战教学 LSTM+Transformer混合模型时间序列预测实战教学 毕业设计 阅读详情

相关推荐

再生龙(clonezilla)镜像比目标盘大——基于centos8.5

再生龙恢复到小盘遇到的问题及处理,首先是修改分区大小,进入dracut模式后再尝试恢复临时系统。

u010101453的博客 3690

爬取分析拉勾网招聘信息

目录 数据爬取篇: 1、伪造浏览器访问拉勾网 2、获取招聘数据 数据分析篇: 1、数据清洗: 2、数据可视化: 总结: 爱写bug(ID:icodebugs) 作者:爱写b...

weixin_30834783的博客 470

药物重定位实战:如何用反向找靶技术挖掘老药新用(附Python代码示例)

本文详细介绍了药物重定位中的反向找靶技术,通过分子相似性计算、机器学习模型和结构对接等方法,挖掘已有药物的新治疗潜力。附Python代码示例,帮助读者快速实现从分子结构到潜在靶标的智能预测,显著提升药物研发效率。

weixin_28726671的博客 259

拉勾数据结构课程之归并排序

归并排序原理: 一开始先把数组从中间划分成两个子数组,一直递归的把子数组划分成更小的子数组,直到子数组里面只有一个元素才开始排序。 排序的方法就是按照大小顺序合并两个元素,接着依次按照递归的返回顺序,不断地合并排好序的子数组,直到最后把整个数组的顺序排好。 归并 排序合并: 合并函数实现的其实就是如何把两个有序的数组合并成一个数组 代码一: 比较常见的有序数组合并代码,也比较好理解 public void merge(int[] nums,int low,int mid,int h...

learner_up的博客 253

遥感图像融合实战:5分钟搞懂全色与多光谱图像如何提升分辨率(附Python代码)

本文通过实战案例,详细解析了如何利用全色锐化技术融合全色与多光谱遥感图像,以提升图像分辨率。文章深入浅出地介绍了核心概念、环境配置、经典GS融合算法的Python代码实现,并对比了不同算法的优劣,最后提供了效果评估方法与实战陷阱分析,帮助读者快速掌握遥感图像融合的关键技术。

weixin_29041195的博客 394

遗传算法解整数规划IntCon

x = ga(fun,nvars,A,b,[],[],lb,ub,nonlcon,IntCon) IntCon就是代表整数的参量,描述的是哪几个自变量是0-1整数变量。比如navrs设置有4个变量,设置IntCon为[2 3],代表第2和第3个变量是整数。 再比如设置IntCon=2:2:nvars,代表偶数项的变量是整数。 值得注意的是一旦设置了非空的IntCon,则Aeqandbeqmust be an empty entry ([]), andnonlconmust re...

jianti9962的博客 9220

拉勾专业算法能力测评-汇总

ACM模版简介这个貌似是某网和51Nod 平台合作,为了招聘用的,所以测评奖励有些扯淡,对于不是毕业生或者已经工作的人……对了,你猜的没错,就是拉钩!!!这次一共从 51Nod 官网已有题库中选取了 1414 道题,从 55 分题(一级题)到 320320分题(七级题)各两道,你没有听错,是 51Nod 已经公布过的题,所以这个测试对于我这种人来说,很容易水一个不错的名次,当然,这严重和实力不符,我

逐梦者 1249

某讯天御滑块验证码逆向实战:从参数解析到环境对抗

本文详细解析了某讯天御滑块验证码的逆向工程实战技巧,从关键参数解析到浏览器环境模拟对抗。重点介绍了collect、eks等参数的逆向思路,以及如何通过puppeteer等工具补全环境检测,帮助开发者有效突破验证码防护。文章还提供了常见错误解决方案和性能优化建议,是验证码逆向领域的实用指南。

weixin_29325007的博客 437

51Nod拉勾专业算法能力测评

**走格子** 基准时间限制:1 秒 空间限制:131072 KB 分值: 5 有编号1-n的n个格子,机器人从1号格子顺序向后走,一直走到n号格子,并需要从n号格子走出去。机器人有一个初始能量,每个格子对应一个整数A[i],表示这个格子的能量值。如果A[i] > 0,机器人走到这个格子能够获取A[i]个能量,如果A[i] < 0,走到这个格子需要消耗相应的能量,如果机器人的能量 < 0,就无法继

moonlight的博客 487

CVAT本地部署保姆级教程:用Docker Compose在Ubuntu上5分钟搞定你的私有数据标注平台

本文提供CVAT本地部署的保姆级教程,详细讲解如何在Ubuntu系统上使用Docker Compose快速搭建私有数据标注平台。从环境准备、Docker配置到CVAT部署全流程,涵盖硬件要求、性能优化及安全加固等关键步骤,帮助开发团队5分钟内完成高效、安全的标注环境搭建。

weixin_42619742的博客 383

Python爬虫终极实战:逆向解析+异步处理,高效爬取中关村在线万级产品数据

爬虫工程师的战场,已经从简单的HTML解析,转向了对网络协议、JavaScript执行逻辑的深度逆向工程。然后刷新页面,当浏览器发起这个请求时,执行会暂停,我们可以一步步跟蹤调用栈(Call Stack),找到发起请求前的JavaScript代码,从而发现参数的计算逻辑。它们会添加一个动态的、一次性的签名(token)或加密参数,用于验证请求的合法性。这是整个爬虫最核心、最具技术含量的部分。的请求,其响应体正是结构清晰的JSON数据,包含了当前页面的所有手机信息(产品ID、名称、价格、图片等)。

2201_76125261的博客 429

拉勾网教育课程之《数据结构与算法面试宝典》

数据结构之一题多解 栈 栈的特性与使用 特点: 先进后出 案例1 判断字符串括号是否合法 字符串中只有字符“(”和“)”。合法字符串需要括号可以配对。 比如:输入:"()" 输出:true 解释:() ()() (())都是合法的 实现一个函数,来判断给定的字符串是否合法 解题思路 模拟 模拟题目的运行 字符串 "()()(())" 规律 尝试总结出题目的一般规律和特点 每个左括号"("或者右括号")"都要完成配对 才是合法的 配对可通过消除法来消除合法的括号,如果

qq_36581961的博客 882

VLA仿真平台:Isaac sim、MuJoCo

在虚拟仿真领域,VLA(Virtual Learning Agent)仿真器是用于开发和训练虚拟机器人代理的环境,它们为机器人提供了一个平台来进行各种任务的模拟和学习,特别是在强化学习(RL)中。两款广泛应用的仿真器是和。这两者各有其特点和优势,适用于不同类型的机器人研究和开发。

u013250861的博客 861

拉勾网《32个Java面试必考点》学习笔记之六------数据结构与算法

本文为拉勾网《32个Java面试必考点》学习笔记.只是对视频内容进行简单整理,详细内容还请自行观看视频《32个Java面试必考点》.若本文侵犯了相关所有者的权益,请联系:txzw@live.cn.将会删除相关内容 数据结构与算法数据结构树二叉搜索树平衡二叉树红黑树B树B+树算法字符串匹配问题TopK问题找出N个数中最小的k个数(N非常大)从N有序队列中找到最小的K个值常用算法介绍面试考察点加分项...

格林奥斯汀的博客 2469

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

数据结构与算法

目录前言第一部分 数据结构与算法概述第1节 数据结构的概念1.1 什么是数据结构1.2 常见的数据结构第2节 算法的概念2.1 什么是算法2.2 常见算法第3节 算法复杂度3.1 时间复杂度3.2 空间复杂度第二部分 数据结构与算法基础第1节 线性表1.1 数组1.2 链表1.3 栈1.4 队列第2节 散列表第3节 递归第4节 二分查找第三部分 数据结构与算法高级第1节 树第2节 排序1.1 冒泡排序1.2 快速排序1.3 堆排序1.4 计数排序1.5 桶排序第3节 字符串匹配第4节 图第5节 算法思维贪心

m0_46337171的博客 399

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

6月程序员薪资统计出炉!前端薪资差距高达5倍!还躺平?

*年薪30W起步,100W踮踮脚也够得到!**劝大家一定进大厂的话就不多说了!当然,各大厂之间也有较量,能拿哪家的 Offer,咱们各凭本事!但有一点非常明确!号下的朋友总留言问,怎么进大厂?怎么能要到好的 base?答案显而易见,进大厂,拿高薪就一定要不断提升自己的技术!这里有一份分享给大家。内涵,想要进阶自身技能的前端,???(不同场景下,凭借工程化方式高效开发项目)(掌握核心框架原理,提高代码质量,体系化劣实技术能力)(根据业务开发场景,选择并优化技术开发方案)

2401_84419009的博客 359

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

知乎万赞:为什么我不建议你转行学python?

写在前面 本文的目的很简单,一句话: 用最少的时间,最高效率,让你清楚:想要拿到python offer,你需要做什么?你该怎么做?如果你不具备这些条件,我不建议你转行学python! 背景 我在土木专业挣扎了六年。刚毕业的时候,我来到了上海,进入一家设计院做土木工程师。然而土建大坑逐渐消磨掉我的热情。考虑到建筑行业日薄西山,房地产也不景气,于是我开始准备跳槽啦! 2019年初,我拿到了国内某大型互联网公司的Offer,如愿跳出土木大坑成为了一枚python程序媛,直接感受是工资翻了一翻。 跳槽的过程虽然

Javachichi的博客 3355

知乎万赞:为什么我不建议你转行学python?_为什么不建议学python

本文的目的很简单,一句话:用最少的时间,最高效率,让你清楚:想要拿到python offer,你需要做什么?你该怎么做?如果你不具备这些条件,我不建议你转行学python!推荐STAR模型。S——situation,项目是什么背景下产生的 T——task,你的任务是什么 A——action,你怎么做的 R——result,结果如何。

python03012的博客 1323

知乎万赞:为什么我不建议你盲目转行学python?

本文的目的很简单,一句话:用最少的时间,最高效率,让你清楚:想要拿到python offer,你需要做什么?你该怎么做?如果你不具备这些条件,我不建议你转行学python!推荐STAR模型。S——situation,项目是什么背景下产生的 T——task,你的任务是什么 A——action,你怎么做的 R——result,结果如何。

xiaolinyui的博客 1157

知乎万赞:想要拿到python offer,你需要做什么?你该怎么做?

本文的目的很简单,一句话:用最少的时间,最高效率,让你清楚:想要拿到python offer,你需要做什么?你该怎么做?如果你不具备这些条件,我不建议你转行学python!推荐STAR模型。S——situation,项目是什么背景下产生的 T——task,你的任务是什么 A——action,你怎么做的 R——result,结果如何。

xiaolinyui的博客 1077

看完不会的来打我!12年高级工程师的“飞升之路”,全网疯传

开头 经常会有人问:“现在学习Android开发还有前景?”我的看法是现在只是市场趋于平稳了,对开发人员的要求越来越好了,这并不代表没有前景了。 移动开发不等于App开发,所有新的技术浪潮其实都可以融入到移动开发的体系里,比如IOT、音视频、边缘计算、VR/AR,我们要做的,只是打好基础,随时准备战斗。其次,从心态上,我觉得我们千万不要把时间浪费在纠结问题上,而是应该放在解决问题上。“王者荣耀”“吃鸡”并不能解决我们的焦虑,拥抱变化,才能拥有未来,让我们共勉。 移动端的招聘中高端的职位还是很多的,看了下拉勾

fanzhang_vip0723的博客 151

不是计算机专业自学python 好找工作吗?

我是从土木行业转行出去的,而且是工作后开始学习的python,我将从从我的个人经历和你分享,我为什么转行python,以及python学习需要掌握什么知识可以拿到offer!任何时候职业感兴趣和坚持下来,学python都不会晚!.........

javatiange的博客 414
上一篇: yarn 工作机制原理浅析
下一篇: 拉勾数据结构课程之归并排序
date-date
博客等级 码龄9年 6粉丝 28原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值