【算法day2】复杂度和简单排序算法(2)
插入排序
有以下数组
数组:[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)的更多相关文章
- 简单排序算法 C++类实现
简单排序算法: 冒泡排序 插入排序 选择排序 .h代码: // // SortClass.h // sort and selection // // Created by wasdns on 16/1 ...
- 简单排序算法设计(Java)
总共有八种排序算法,还是慢慢看吧 1.简单排序算法 简单排序算法就是设置标兵,逐个比较数,然后查找插入位置,插入 public static void p(int[] a){ for(int i=0; ...
- 《算法4》2.1 - 选择排序算法(Selection Sort), Python实现
选择排序算法(Selection Sort)是排序算法的一种初级算法.虽然比较简单,但是基础,理解了有助于后面学习更高深算法,勿以勿小而不为. 排序算法的语言描述: 给定一组物体,根据他们的某种可量化 ...
- Java数据结构和算法(三):常用排序算法与经典题型
常用的八种排序算法 1.直接插入排序 我们经常会到这样一类排序问题:把新的数据插入到已经排好的数据列中.将第一个数和第二个数排序,然后构成一个有序序列将第三个数插入进去,构成一个新的有序序列.对第四个 ...
- JavaScript 数据结构与算法之美 - 十大经典排序算法汇总(图文并茂)
1. 前言 算法为王. 想学好前端,先练好内功,内功不行,就算招式练的再花哨,终究成不了高手:只有内功深厚者,前端之路才会走得更远. 笔者写的 JavaScript 数据结构与算法之美 系列用的语言是 ...
- python实现简单排序算法
算法 递归两个特点: 调用自身 有穷调用 计算规模越来越小,直至最后结束 用装饰器修饰一个递归函数时会出现问题,这个问题产生的原因是递归的函数也不停的使用装饰器.解决方法是,只让装饰器调用一次即可,那 ...
- 用javascript实现简单排序算法
声明:本文为原创文章,如需转载,请注明来源WAxes,谢谢! 本文为楼主自己的学习记录文章,若有不当之处请斧正. 本文主要记录排序算法 [冒泡排序] 感觉这个是最简单的排序算法了.直接引用维基百科里的 ...
- js的几种简单排序算法及其效率实测
function swap(arr,index1,index2){ var t = arr[index1]; arr[index1] = arr[index2]; arr[index2] = t; } ...
- 三种简单排序算法(java实现)
一.冒泡排序 算法思想:遍历待排序的数组,每次遍历比较相邻的两个元素,如果他们的排列顺序错误就交换他们的位置,经过一趟排序后,最大的元素会浮置数组的末端.重复操 作 ...
- [读书笔记]算法(Sedgewick著)·第二章.初级排序算法
本章开始学习排序算法 1.初级排序算法 先从选择排序和插入排序这两个简单的算法开始学习排序算法.选择排序就是依次找到当前数组中最小的元素,将其和第一个元素交换位置,直到整个数组有序. public s ...
随机推荐
- [转帖]银河麒麟高级服务器操作系统V10SP1安装Docker管理工具(Portainer+DockerUI)
文章目录 一.系统环境配置 二.安装Docker 三.安装Docker管理工具 Docker管理工具之Portainer Portainer简介 Portainer安装 Portainer访问测试 D ...
- with(上下文管理器)的用法
with语句可以自动管理上下文资源,不论什么原因(成功或失败)跳出with语句,都能保证文件正确关闭,并 释放资源,不用手动去close掉资源 1.with语句中有两个内置方法__enter__和__ ...
- js引起的 xxxx of null
在 vue 中操作 dom 元素的时候,报错 style of null 这个报错的原因,跟你代码的健壮性有关了; 这样就不会报错了 if( document.querySelectorAll(&qu ...
- [置顶] python常用web开发框架
Flask篇 第一篇:初识Flask.快速启动 第二篇:Flask四剑客 第三篇:Flask的配置文件 第四篇:Flask路由 第五篇:Flask模板渲染 第六篇:Flask的请求与响应 第七篇:Fl ...
- 从零开始匹配vim(1)——选项设置
前面我们算是对 vimscript 做了一个入门,并且实现了一个 输出 hello world 的语句.现在我们继续进行 vimscript 的学习. set语句 之前在介绍 vim 基础的时候,我们 ...
- .net5发布到Linux指南
目录 Aspnetcore api 服务发布指南 一. 搭建nginx服务器 下载安装gcc编译库 下载安装pcre正则表达式库 下载安装openssl安全加密库 下载安装zlib解压库 下载解压并编 ...
- 使用Docker单机部署Ceph
安装Docker过程参考:https://www.cnblogs.com/hackyo/p/9280042.html 1. 创建Ceph专用网络 sudo docker network create ...
- 深入浅出Java多线程(九):synchronized与锁
引言 大家好,我是你们的老伙计秀才!今天带来的是[深入浅出Java多线程]系列的第九篇内容:synchronized与锁.大家觉得有用请点赞,喜欢请关注!秀才在此谢过大家了!!! 在现代软件开发中,多 ...
- Hive-安装和部署(Hive3.1.2)
(一)安装前提 (1) 安装JDK1.8及以上版本 (2) 已经安装MySQL,推荐5.7. (3) 已经安装Hadoop. JDK.MySQL.Hadoop的安装,本文不再介绍. (二)安装Hive ...
- [Java]《On Java》阅读记录之 -- 可变参数重载问题
<On Java>阅读记录之 -- 可变参数重载问题 有下面一段代码: public class OverloadingVarargs2 { static void f(float i , ...