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

常见算法——查找与排序

查找算法

基本查找

二分查找/折半查找

分块查找

普通分块查找

乱序中透露着有序

块内无序,块与块之间有序(一个块前面的块的最大值小于它的最小值,后面的块反之)

块数数量一般等于数据个数的平方根,比如16个数字分为4块

核心思路:先确定要查找的元素在哪一块,然后在块内挨个查找

步骤: 1、创建数组blockArr存放每一块对象的信息 2、先查找blockArr确定要查找的元素在哪一块 3、在对应的块内挨个查找

扩展的分块查找 

1、无规律的数据

2、各个块之中没有交集就可以

排序算法

冒泡排序

相邻数据两两比较,小的放前面,大的放后面

第一轮循环结束,找到最大值

第二轮循环只要在剩余的元素(比第一轮少循环一次)找次大值就可以了,以此类推

选择排序

从0索引开始,跟后面的元素依次比较,小的放前面,大的放后面

第一轮结束,最小的数据确定

第二轮从1索引开始,以此类推。

插入排序

将0索引的元素到N索引的元素看做是有序的,把N+1索引的元素到最后一个当成无序的。

遍历无序的数据,将遍历到的元素插入有序序列中适当的位置,如遇到相同数据,插在后面。

N的范围:0~最大索引

在无序的数据中从前往后取数据,跟有序序列中的数据从后往前(也就是从大到小)进行比较

快速排序

第一轮:把0索引的数字作为基准数,确定基准数在数组中正确的位置

比基准数小的全部都在左边,比基准数大的全部在右边。

第一轮:把1索引的数用start指向它,最后的数用end指向;end找比基准数小的数,找到一个之后,start开始找比基准数大的数,找到之后end指向的数与start指向的数换位置,之后再动end以此类推;直到end和start指向同一个数,就让0索引这个基准数与它换位置。

http://www.dtcms.com/a/290026.html

相关文章:

  • LeafletJS 主题与样式:打造个性化地图
  • 【高精度 带权并集查找 唯一分解定理】 P4079 [SDOI2016] 齿轮|省选-
  • 在血研所(SIH)恢复重建誓师大会上的讲话(by血研所创始所长王振义院士)
  • Stream流-Java
  • 用Dify构建气象智能体:从0到1搭建AI工作流实战指南
  • Redis学习-06渐进式遍历
  • Jmeter工作界面介绍
  • Three.js实现银河流光粒子星空特效原理与实践
  • 图论基本算法
  • 【前端】corepack包管理器版本管理工具的介绍与使用
  • Spring Boot 3企业级架构设计:从模块化到高并发实战,9轮技术博弈(含架构演进解析)
  • 在安卓源码中添加自定义jar包
  • 【unitrix】 6.11 二进制数字标准化模块(normalize.rs)
  • vue-pinia
  • 基于WebSocket的安卓眼镜视频流GPU硬解码与OpenCV目标追踪系统实现
  • Vue 脚手架——render函数
  • Django模板系统
  • OpenAI无向量化RAG架构:大模型落地的颠覆性突破
  • 【浓缩版】蓝牙开发概览
  • 板凳-------Mysql cookbook学习 (十二--------3_1)
  • 【Linux】Prometheus 监控 Kafka 集群
  • Spring MVC 核心工作流程
  • 车载电子电器架构 --- MCU信息安全相关措施
  • docker 软件bug 误导他人 笔记
  • JSX(JavaScript XML)‌简介
  • 力扣15:三数之和
  • 【洛谷】The Blocks Problem、合并两个有序数组,补充pair(vector相关算法题p2)
  • 闲庭信步使用图像验证平台加速FPGA的开发:第二十八课——图像膨胀的FPGA实现
  • “融合进化,智领未来”电科金仓引领数字化转型新纪元
  • Flutter和Kotlin的对比