插入排序

有以下数组

数组:[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. [转帖]银河麒麟高级服务器操作系统V10SP1安装Docker管理工具(Portainer+DockerUI)

    文章目录 一.系统环境配置 二.安装Docker 三.安装Docker管理工具 Docker管理工具之Portainer Portainer简介 Portainer安装 Portainer访问测试 D ...

  2. [知乎]2019-nCov的致死率问题

    https://www.zhihu.com/question/369630554/answer/998649507 知乎 dr.李的文章 跟自己一开始的理解很相似.. 个人也认为死亡率会高于2% 武汉 ...

  3. Lectures

    Copy and Paste 3(P9523) Problem Solution 转移方程中的"父问题枚举子问题寻找转移"可以转成"子问题寻找父问题主动转移"处 ...

  4. 动态添加input,然后获取所有的input框中的值

    今天遇见一个问题. 点击按钮,动态添加input框(可以添加多个) 然后搜集用户在input中输入的值. 我刚刚在纠结,给input框中注入事件. 但是这样会很麻烦. 经过同事的指点. 我直接去拿v- ...

  5. CentOS使用iptables开放3000端口

    关闭firewall systemctl stop firewalld.service 禁止firewall开机启动 systemctl disable firewalld.service 设置ipt ...

  6. 卧槽!这 5 个后端程序员学习指南竟然斩获超过 350k 的 star

    前段时间弄应届生学习指南的时候,整理了几个不错的开源文档,分享给小伙伴们!我觉得应该可以对大家有帮助. 本期文章对应的视频地址:https://www.bilibili.com/video/BV1xZ ...

  7. mermaid图详解(一)流程图|超详细的代码解释

    本文参考Github项目 https://github.com/mermaid-js/mermaid/ 前言 那么这里博主先安利一些干货满满的专栏了! 首先是博主的高质量博客的汇总,这个专栏里面的博客 ...

  8. Git企业开发控制理论和实操-从入门到深入(三)|分支管理

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

  9. Leetcode刷题第六天-回溯

    131:分割回文串 链接:131. 分割回文串 - 力扣(LeetCode) for 遍历字符串 递归切割,切割到字符串尾,单次结束 1 class Solution: 2 def partition ...

  10. SpringBoot + LiteFlow:轻松应对复杂业务逻辑,简直不要太香!

    LiteFlow简介 LiteFlow是什么? LiteFlow是一款专注于逻辑驱动流程编排的轻量级框架,它以组件化方式快速构建和执行业务流程,有效解耦复杂业务逻辑.通过支持热加载规则配置,开发者能够 ...