插入排序

有以下数组

数组:[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. [转帖]关于linux:NUMA架构下的内存延迟区别测试

    https://lequ7.com/guan-yu-linuxnuma-jia-gou-xia-de-nei-cun-yan-chi-qu-bie-ce-shi.html 当初的服务器物理机CPU个别 ...

  2. dispaly结合背景图片会提升加载性能

    1.display的常见现象 我们很多人都知道,display可以让元素实现隐藏或者显示. 或者让行级元素变成块级元素. 对它的认识也是比较准确的. 如果一个元素使用了display:none; 那么 ...

  3. mysql系列14---mysql数据库还原与备份

    一.Liunx服务器下数据库定时备份 1.编写mysql在docker容器中备份的shell脚本: #!/bin/bash#  2020-11-15#docker启动的mysql备份mysql_use ...

  4. 如何在IntelliJ IDEA中运行Java/Scala/Spark程序

    本文将分两部分来介绍如何在IntelliJ IDEA中运行Java/Scala/Spark程序: 基本概念介绍 在IntelliJ IDEA中创建和运行java/scala/spark程序 基本概念介 ...

  5. 【OpenIM原创】简单轻松入门 一文讲解WebRTC实现1对1音视频通信原理

    什么是 WebRTC ? WebRTC(Web Real-Time Communication)是 Google于2010以6829万美元从 Global IP Solutions 公司购买,并于20 ...

  6. vscode中文搜索乱码或搜索不到

    使用vscode在全局搜索时,代码中的内容无法搜索出来,或者搜索出来是乱码. 经验证:与vscode的语言设置无关,设置为中文或英文都是一样的 后面猜想到会不会与文件自身的编码有关,因为我们项目中的代 ...

  7. vim 从嫌弃到依赖(6)——插入模式

    插入模式是vim中主要用来处理输入的一种模式,在这种模式中,用户的输入的字符会显示在窗口中.该模式中的行为与在普通编辑器中输入类似.由于在该模式中输入的字符会被当做有效输入,因此该模式下涉及的到命令也 ...

  8. 手撕Vue-提取元素到内存

    接着上一篇文章,我们已经实现了构建Vue实例的过程,接下来我们要实现的是提取元素到内存. 主要是通过文档碎片来实现,文档碎片是一个轻量级的文档,可以包含和控制节点,但是不会像真实的DOM那样占用内存, ...

  9. 4.5 C++ Boost 文件目录操作库

    Boost 库是一个由C/C++语言的开发者创建并更新维护的开源类库,其提供了许多功能强大的程序库和工具,用于开发高质量.可移植.高效的C应用程序.Boost库可以作为标准C库的后备,通常被称为准标准 ...

  10. vi / vim编辑器的使用 [补档-2023-07-01]

    vi/vim编辑器 ​ vi/vim编辑器是linux中的文本编辑器,其中vim比vi的功能更加强大,可以编辑shell程序,推荐使用vim,下面也将介绍vim如何使用. 2-1 vi/vim的三种工 ...