插入排序和二分法(下)

简介: 插入排序和二分法(下)
插入排序最差是N^ 选择排序和冒泡排序严格是N^ 所以插入排序的算法性能要优于选择排序和冒泡排序
0~0范围是有序的
所以从下标1位置开始
第一个for循环 表示想在0~1范围有序,想在0~2范围有序,想在0~3范围有序...
第二个for循环
比如第i的位置 此时想让0~i位置有序
已经做到了在0~i-1范围上有序了


image.png

比如第i位置上的数是Y
j=i-1
j+1就是i
j位置上的数和j+1位置上的数比较
前一个要小了 这个时候要交换

image.png

交换完了之后 Y就来到了i-1位置
接下来往左移动再比较j--位置上的数即i-2
j+1位置上的数就是i-1
如果j位置上的数大于j+1位置上的数
还是往左移
j就是当前数的前一个数,当前数在j+1位置

image.png

所以第二个for循环就是在做:
一直往前看如果一直都小的话就一直往前换
换到越界停或者换到不比左边位置小了停


二分法


1、在一个有序的数组中,找某个数是否存在

如果从左往右遍历找的话 就是一个O(N)的算法
每个数只碰一次
通过二分法找最快
先找到中点位置的数

image.png

如果x > num
所以x右边一定不会有num
就可以在x左边继续二分
如果x < num
所以x左边是不需要看的
只在x右边二分

这个算法的时间复杂度怎么估计?一次砍一半 一共砍几次 时间复杂度是

比如数组中一定有8个数 
砍一半4个
再砍2个
再砍1个
如果还找不到就是不存在这个数

如果找到了就是砍3次就是

2、在一个有序数组中,找>=某个数最左侧的位置

image.png

是否满足大于等于num

4是满足的 所以左侧有可能还存在大于等于3的数 所以继续二分


image.png

假设中点是箭头所指的2

次是不满足大于等于num

所以右边去二分


image.png

再找中点位置 上图箭头3

比之前记录的t的位置更靠左 所以放弃之前t的位置记 上图箭头3的位置为t

满足大与等于3 再往左分

image.png


也满足 再分就没有数据可分了

二分法找一个数存不存在 当找到了 就不需要二分了

而找大于等于num最左侧的位置一定是二分到结束的 即二分到某一个范围上没有数才停

3、局部最小值问题

在数组中 无序 任何2个相邻的数不相等

局部最小定义

如果0位置上的数小于1位置上的数 那么0位置就是局部最小的位置
如果N-1位置上的数 小于 N-2位置上的数
那么N-1就是局部最小位置
如果中间位置i即比左边i-1位置小同时也比i+1位置小
那么i位置就是局部最小
i位置必须同时小于左边和右边的数 才叫局部最小

在这样一个数组中 找出一个局部最小即可

能不能求的过程 时间复杂度好于O(N)

最好二分 ?

这道题目的解析 请看下文讲解哟

相关文章
|
JavaScript 安全 前端开发
js开发:请解释什么是XSS攻击和CSRF攻击,并说明如何防范这些攻击。
XSS和CSRF是两种常见的Web安全威胁。XSS攻击通过注入恶意脚本盗取用户信息或控制账户,防范措施包括输入验证、内容编码、HTTPOnly Cookie和CSP。CSRF攻击则诱使用户执行未经授权操作,防范手段有CSRF Tokens、双重验证、Referer检查和SameSite Cookie属性。开发者应采取这些防御措施并定期进行安全审计以增强应用安全性。
280 0
|
存储 缓存 应用服务中间件
Docker 镜像解密:分层存储与镜像构建原理
Docker 镜像解密:分层存储与镜像构建原理
688 0
|
9月前
|
C++
【C++数据结构——栈和队列】括号配对(头歌实践教学平台习题)【合集】
【数据结构——栈和队列】括号配对(头歌实践教学平台习题)【合集】(1)遇到左括号:进栈Push()(2)遇到右括号:若栈顶元素为左括号,则出栈Pop();否则返回false。(3)当遍历表达式结束,且栈为空时,则返回true,否则返回false。本关任务:编写一个程序利用栈判断左、右圆括号是否配对。为了完成本关任务,你需要掌握:栈对括号的处理。(1)遇到左括号:进栈Push()开始你的任务吧,祝你成功!测试输入:(()))
199 7
|
索引
【UVM源码学习】uvm_packer
【UVM源码学习】uvm_packer
1386 0
|
关系型数据库 MySQL 数据库连接
FreeSWITCH通过mod_mariadb原生连接MySQL
FreeSWITCH通过mod_mariadb原生连接MySQL
897 0
|
机器学习/深度学习 PyTorch 算法框架/工具
PyTorch深度学习基础之Reduction归约和自动微分操作讲解及实战(附源码 超详细必看)
PyTorch深度学习基础之Reduction归约和自动微分操作讲解及实战(附源码 超详细必看)
300 0
|
监控 前端开发 安全
【专栏】介绍了前端工程师如何掌握SSH命令,包括SSH协议的基础知识、命令行操作如登录、文件传输、目录管理和进程管理
【4月更文挑战第29天】本文介绍了前端工程师如何掌握SSH命令,包括SSH协议的基础知识、命令行操作如登录、文件传输、目录管理和进程管理。在前端开发中,SSH用于部署项目、协同后端开发及服务器监控。文章还强调了使用密钥认证、配置别名及安全注意事项,并提醒开发者面对问题时如何解决。学习和熟练运用SSH是前端工程师适应复杂项目需求的关键。
338 0
|
存储 缓存 前端开发
字节-2024最新前端面试题梳理-2
字节-2024最新前端面试题梳理-2
824 0
|
存储 缓存 Java
每日一博 - 常见的Spring事务失效&事务不回滚案例集锦
每日一博 - 常见的Spring事务失效&事务不回滚案例集锦
442 0