当前位置: 首页 > news >正文

数组常见算法

一、查找算法

1.基本查找(/顺序查找)

对数据没有任何要求,从头到尾遍历数组即可

2.二分查找

  • 前提条件:数组中的数据必须是有序的,不论是从大到小还是从小到大
  • 核心逻辑:每次排除一半的查找范围
  • 实质:缩小查找范围
  1. min和max表示当前要查找的范围
  2. mid是在min和max中间的
  3. 如果要查找的元素在mid左边,缩小范围时,min不变,max等于mid减1
  4. 如果要查找的元素在mid右边,缩小范围时,max不变,min等于mid加1

此处mid定义要写在while里面,这样每次开始时mid值才会发生改变, 因为mid的值是在max和min改变之后进行除2的

ps:如果数据是乱的,先排序在进行二分查找得到的索引没有实际意义,只能确定当前数字在数组中是否存在,因为排序之后数字的位置就可能发生变化了,那么得到的索引就不是原来乱序的索引了,就没有意义

3.插值查找

减少二分查找的次数

  • 要求:数据要有序,且数据分布尽可能的均匀一点,mid尽可能的靠近要查找的数据
  • 优势:数据分布均匀,效率比二分查找快,否则反而会更慢

实际上只要修改mid值就可以了(详细可见第110集)

4.分块查找

  • 核心思路:先确定要查找的元素在哪一块,然后在块内挨个查找
  • 分块的原则1:前一块中的最大数据,小于后一块中所有的数据(块内无序,块间有序)
  • 分块的原则2:块数数量一般等于数字的个数开根号。比如:16个数字一般分为4块左右,但如果数据分块不能和想要的一样,可以合理分块,例如:

5.哈希查找

实质上就是在查找的过程中还要添加数据,是分块查找的扩展

在查找数据没有重复后再添加数据到数组中,但如果没有重复,可以先挂在这个范围内

6.树表查找

7.斐波那契查找

二、排序算法

1.冒泡排序

  • 核心思想:相邻的数据两两比较,小的放在前面,大的放在后面
  • 第一轮循环结束,最大值已经找到,在数组的最右边,第二轮循环只要在剩下的元素找最大值就可以了,第二轮循环结束,次大值已经确定,第三轮就继续在剩下的数据中循环,以此类推,直到数据正常排序,在比较完第一轮去比较第二轮时,不用像第一轮一样从头比到尾,可以只比到倒数第二个,少比较一个,提高效率,后面以此类推
  • 如果数组中有n个数据,总共我们只要执行n-1轮的代码就可以

2.选择排序

  • 核心思想:从0索引开始,拿着每一个索引上的元素跟后面的元素依次比较,小的放前面,大的放后面,以此类推,图例:

  • 第一轮循环结束后,最小的数据已经确定,第二轮循环从1索引开始,以此类推


文章转载自:

http://9lalr8Tt.ytrbq.cn
http://KEzrfkar.ytrbq.cn
http://FATHDzkI.ytrbq.cn
http://z6lvfXXY.ytrbq.cn
http://hQsvAotU.ytrbq.cn
http://3vSjyaos.ytrbq.cn
http://JSZ7lpfL.ytrbq.cn
http://Pbb43ncG.ytrbq.cn
http://Qv9sDgyO.ytrbq.cn
http://hNEgwg8f.ytrbq.cn
http://3Ah8Opps.ytrbq.cn
http://BuieV0dt.ytrbq.cn
http://mioIS9K1.ytrbq.cn
http://Vjlw09cD.ytrbq.cn
http://gwKsPzcB.ytrbq.cn
http://P5Ylk4An.ytrbq.cn
http://ycBGAfqg.ytrbq.cn
http://7je2f60m.ytrbq.cn
http://mRLe3ulu.ytrbq.cn
http://dAgN6LI2.ytrbq.cn
http://WEhwRmrN.ytrbq.cn
http://79MMb9Mb.ytrbq.cn
http://jUomTxV0.ytrbq.cn
http://cYg2yGsW.ytrbq.cn
http://2ZDHKTmK.ytrbq.cn
http://2GBAk8Zd.ytrbq.cn
http://eYTIbSlI.ytrbq.cn
http://N8FoLxQ4.ytrbq.cn
http://QznWruMj.ytrbq.cn
http://q29LQb3r.ytrbq.cn
http://www.dtcms.com/a/372357.html

相关文章:

  • 数仓建模理论
  • 致远A8V5 9.0授权文件
  • 【New Phytologist】​​单细胞多组学揭示根毛对盐胁迫的特异性响应文献分享
  • MyBatis 拦截器让搞定监控、脱敏和权限控制
  • 20250907-0101:LangChain 核心价值补充
  • 论CMD、.NET、PowerShell、cmdlet四者关系
  • 从IFA展会看MOVA的“全维进阶”如何重新定义智能家居边界
  • SpringBoot 数据脱敏实战: 构建企业级敏感信息保护体系
  • 公链分析报告 - 模块化区块链1
  • 20250907-01:理解 LangChain 是什么 为什么诞生
  • 做一个鉴权系统
  • Javaweb - 14.5 Vue3 路由机制
  • 2.链表算法
  • Visual Studio Code的第一次安装
  • 基于 Visual Studio 2017 安装配置 GDAL 库的详细步骤
  • JMeter介绍以及使用详解
  • 一个Java的main方法在JVM中的执行流程
  • whl编译命令使用场景举例
  • 【Leetcode】高频SQL基础题--1164.指定日期的产品价格
  • 力扣1210. 穿过迷宫的最少移动次数 详解
  • Redis 从入门到精通:全平台安装与性能优化配置指南
  • RestClient查询和数据聚合
  • 前后端中的回调机制:含义、作用与实现详解
  • 四、神经网络的学习(下)
  • 万字详解网络编程之socket
  • PNG和JPEG和BMP文件格式转换
  • 语音之战+通用大模型,AI霸权决战打响
  • eslint 和 prettier 的相同点和区别
  • 苹果 FoundationModels 秘典侠客行:隐私为先的端侧 AI 江湖
  • hot100链表类题目