插入排序

有以下数组

数组:[2,4,3,6,1]

序号:[0,1,2,3,4]

第一次排序(范围0~0):2左边没东西,不动

第二次排序(范围0~1):4左边是2,4大不动

第三次排序(范围0~2):3左边是4,移动,再左边是2,3大不动

第四次排序(范围0~3):以此类推,直到排序结束

这个过程有点像拿扑克牌,把抽到的牌插到适合的地方

注:算法的时间复杂度是按照其最差情况下的来算的

插入排序与冒泡排序之间的区别:https://www.cnblogs.com/AraragiTsukihi/p/6339928.html

二分法

1)在一个有序数组中,找某个数是否存在【经典二分】

方法1:遍历(时间复杂度O(N))

方法2:二分法(时间复杂度O(log2N))

​ 设要找的数是num,每次取数组的中间值x与num比较

若x>num,那么数组中位于x右边的数不用找了,在x左边继续取中间值比较

若x<num,那么数组中位于x左边的数不用找了,在x右边继续取中间值比较

若x=num,...

直到找到num

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

3)局部最小值问题【一般二分用于有序情况,但无序也可以用】

局部最小定义:

在一个无序数组中,人格相邻数一定不相等

  • 对于0位置的数(a),如果其小于1位置的数(b),那么0位置处局部最小
  • 对于N-1位置的数,如果其小于N-2位置的数,那么N-1位置处局部最小
  • 对于中间位置的数i,它同时比左边的数i-1和右边的数i+1小,那么i位置处局部最小

例:在无序数组中找到一个局部最小值

先做两个判断:

0位置是否存在局部最小;(有就直接返回0位置)

N-1位置是否存在局部最小;(有就直接返回N-1位置)

若上述局部最小不存在,则0位置到N-1位置上比存在局部最小

再取中间位置M,判断局部最小是否存在(有就直接返回M位置)

若上述局部最小不存在,取M的左边或者右边继续二分,直到找出一个局部最小即可

【算法day2】复杂度和简单排序算法(2)的更多相关文章

  1. 简单排序算法 C++类实现

    简单排序算法: 冒泡排序 插入排序 选择排序 .h代码: // // SortClass.h // sort and selection // // Created by wasdns on 16/1 ...

  2. 简单排序算法设计(Java)

    总共有八种排序算法,还是慢慢看吧 1.简单排序算法 简单排序算法就是设置标兵,逐个比较数,然后查找插入位置,插入 public static void p(int[] a){ for(int i=0; ...

  3. 《算法4》2.1 - 选择排序算法(Selection Sort), Python实现

    选择排序算法(Selection Sort)是排序算法的一种初级算法.虽然比较简单,但是基础,理解了有助于后面学习更高深算法,勿以勿小而不为. 排序算法的语言描述: 给定一组物体,根据他们的某种可量化 ...

  4. Java数据结构和算法(三):常用排序算法与经典题型

    常用的八种排序算法 1.直接插入排序 我们经常会到这样一类排序问题:把新的数据插入到已经排好的数据列中.将第一个数和第二个数排序,然后构成一个有序序列将第三个数插入进去,构成一个新的有序序列.对第四个 ...

  5. JavaScript 数据结构与算法之美 - 十大经典排序算法汇总(图文并茂)

    1. 前言 算法为王. 想学好前端,先练好内功,内功不行,就算招式练的再花哨,终究成不了高手:只有内功深厚者,前端之路才会走得更远. 笔者写的 JavaScript 数据结构与算法之美 系列用的语言是 ...

  6. python实现简单排序算法

    算法 递归两个特点: 调用自身 有穷调用 计算规模越来越小,直至最后结束 用装饰器修饰一个递归函数时会出现问题,这个问题产生的原因是递归的函数也不停的使用装饰器.解决方法是,只让装饰器调用一次即可,那 ...

  7. 用javascript实现简单排序算法

    声明:本文为原创文章,如需转载,请注明来源WAxes,谢谢! 本文为楼主自己的学习记录文章,若有不当之处请斧正. 本文主要记录排序算法 [冒泡排序] 感觉这个是最简单的排序算法了.直接引用维基百科里的 ...

  8. js的几种简单排序算法及其效率实测

    function swap(arr,index1,index2){ var t = arr[index1]; arr[index1] = arr[index2]; arr[index2] = t; } ...

  9. 三种简单排序算法(java实现)

    一.冒泡排序 算法思想:遍历待排序的数组,每次遍历比较相邻的两个元素,如果他们的排列顺序错误就交换他们的位置,经过一趟排序后,最大的元素会浮置数组的末端.重复操                   作 ...

  10. [读书笔记]算法(Sedgewick著)·第二章.初级排序算法

    本章开始学习排序算法 1.初级排序算法 先从选择排序和插入排序这两个简单的算法开始学习排序算法.选择排序就是依次找到当前数组中最小的元素,将其和第一个元素交换位置,直到整个数组有序. public s ...

随机推荐

  1. 2023年第七届蓝帽杯初赛wp

    取证检材容器密码:Hpp^V@FQ6bdWYKMjX=gUPG#hHxw!j@M9 案情介绍 2021年5月,公安机关侦破了一起投资理财诈骗类案件,受害人陈昊民向公安机关报案称其在微信上认识一名昵称为 ...

  2. Leetcode 42题 接雨水(Trapping Rain Water) Java语言求解

    题目链接 https://leetcode-cn.com/problems/trapping-rain-water/ 题目内容 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱 ...

  3. 提高Unity编译dll的速度

    前言 我们有一个Unity纯C#开发的mmo项目(使用ILRuntime热更,开发阶段跑纯C#),在开发到后期之后,每次修改C#代码编译时间在25秒左右,这部分的等待时间是很长的, 我在想有没有办法可 ...

  4. 系统Hosts文件原理和应用

    Hosts的概念 Hosts是一个没有扩展名的系统文件,可以用记事本等工具打开,其作用就是将一些常用的网址域名与其对应的IP地址建立一个关联"数据库",当用户在浏览器中输入一个需要 ...

  5. GaussDB(for MySQL)剪枝功能,让查询性能提升70倍!

    作者,祝青平,华为云数据库内核高级工程师.擅长数据库优化器内核研发,9年数据库内核研发经验,参与多个TP以及AP数据库的研发工作. 近日,华为云数据库社区下面有这样一条用户提问留言:请问,如何通过My ...

  6. 【六】gym搭建自己环境升级版设计,动态障碍------强化学习

    相关文章: [一]gym环境安装以及安装遇到的错误解决 [二]gym初次入门一学就会-简明教程 [三]gym简单画图 [四]gym搭建自己的环境,全网最详细版本,3分钟你就学会了! [五]gym搭建自 ...

  7. 12个例子夯实promise基础

    工作中常常用到promise,async + await,遇到一些问题需要用到基础知识总会有一部分不记得,就重新温习权威指南和es6标准入门,花了几天肝下了这篇文章.喜欢的同学请动动发财手点个赞,文章 ...

  8. Git企业开发控制理论和实操-从入门到深入(六)|多人协作开发

    前言 那么这里博主先安利一些干货满满的专栏了! 首先是博主的高质量博客的汇总,这个专栏里面的博客,都是博主最最用心写的一部分,干货满满,希望对大家有帮助. 高质量博客汇总 然后就是博主最近最花时间的一 ...

  9. 【C语言深度解剖】复数运算问题--【好题系列】学会这题,结构体没问题

    复数问题 今天博主给大家带来一道博主自己在学校做到的一个题目.这个题目可以很好的加深我们对C语言结构体的理解,在这里分享给大家.学懂这题,我们的C语言结构体,没问题了! 本篇建议收藏后食用!以免退出找 ...

  10. SpringBoot不再需要@Autowired来注入属性

    实操部分 需要lombok依赖 在对应需要注入属性的类上添加注解 @RequiredArgsConstructor 所有需要注入的属性改为final修饰 为什么 lombok的@RequiredArg ...