
算法
算法
abcnull
INTP男,好结交志趣相投的朋友,微信:a463279708,希望能共同努力进步!你们的支持将是我写下去的不竭动力......
展开
-
插入排序算法-希尔排序
文章目录算法简介Java 实现时间复杂度空间复杂度算法稳定性 算法简介 希尔排序也是插入排序的一种,更准确的说是插入排序的升级版,在插入排序前加上了一些操作使得元素先基本有序之后再进行插入排序。 希尔排序又称为缩小增量排序,字如其名,朴素的希尔排序算法是通过将增量 k 设为数组长度的一半,以后会每次缩小一半,最后以增量为 1 为结束,增量为 k 时,表示整个数组分为了 k 组,每隔 k-1 的元素...原创 2020-03-05 02:13:32 · 374 阅读 · 0 评论 -
插入排序算法-折半插入排序
文章目录算法简介Java 实现时间复杂度空间复杂度算法稳定性 算法简介 折半插入排序和直接插入排序很相似,都是先假定前面一段序列是有序,然后从整个序列无序的第一个元素起开始遍历,不断的往这个有序的序列中插入,直接插入是一个紧挨着一个找,找到过程中元素不断后移,而这般插入排序利用这半查找的方式来快速找到这个待插入元素再有序序列中那个位置,找到这个位置之后,把相应位置的元素不断后移即可 时间复杂度 O...原创 2020-03-05 00:59:44 · 506 阅读 · 0 评论 -
插入排序算法-直接插入排序
文章目录算法简介Java 实现时间复杂度空间复杂度算法稳定性 算法简介 直接插入排序应该是插入排序中最简单的一种,前几篇博文已经写了冒泡排序(交换排序中最简单的一种),简单选择排序(选择排序中最简单的一种),今天我们来看看直接插入排序的思路和写法 直接插入排序时间复杂度 O(n^2),空间复杂度 O(1),一般来说它是稳定的排序 Java 实现 思路 思路很明确,就是我通过两轮循环,最外层循环是用...原创 2020-03-03 23:27:29 · 326 阅读 · 1 评论 -
选择排序-堆排序
文章目录算法简介Java 实现时间复杂度空间复杂度算法稳定性 算法简介 二叉堆 一棵完全二叉树,对于大顶堆来说,任何一个结点都要大于等于它左右孩子结点,对于小顶堆,任何一个结点都要小于等于它的左右孩子。 二叉堆与数组的联系 二叉堆一般存储在数组中,有这样的性质,如果我们把二叉堆按照从上到下,从左到右的顺序依次存进数组,如果 index 是某个结点的下标值,那么它左右孩子结点的下标值分别是2*ind...原创 2020-03-08 14:16:19 · 256 阅读 · 0 评论 -
模式匹配算法-BF算法
文章目录简介Java 实现时间复杂度 简介 BF 算法即蛮力匹配算法,非常简单粗暴的在主串中匹配子串,一个个匹配,匹配如果不对,就从主串开始匹配的地方的下一个字符又重新开始匹配,直到全部匹配完全,这种算法思考起来虽然很简单,但是效率确实很低的,模式匹配中除了这个 BF 算法之外,还有一个高效经典的 KMP 算法,KMP 就不在这里实现了 Java 实现 逻辑描述 BF 算法我思想是,将子串和主串一...原创 2020-02-17 22:21:52 · 1548 阅读 · 1 评论 -
选择排序算法-简单选择排序
文章目录算法简介Java 实现时间复杂度空间复杂度算法稳定性 算法简介 简单选择排序(Select Sort)或者叫直接选择排序,可以说是排序算法中最简单的一个,同时它的思路也很简单明了,就是通过多轮选择,每轮选择中找到那个最小的数放在该轮序列的最前面,经过 array.length -1 轮之后就可以找到所有轮次中最小的那个然后从小到大的顺序就排好了。 简单选择排序一般来讲不稳定,时间复杂度 O...原创 2020-02-12 15:34:54 · 1021 阅读 · 0 评论 -
交换排序算法-快速排序
文章目录算法简介Java 实现时间复杂度空间复杂度算法稳定性 算法简介 快速排序(Quick Sort)是由冒泡排序改进而来的,冒泡排序对相邻数据进行比较,快速排序则是直接对两个不相邻的数据进行交换,消除多个逆序,快速排序中一次交换可能消除多个逆序 快速排序是由 C.A.R.Hoare 在1962 年提出,大致思想就是把排序的数据分割成独立的两部分,让其中一部分所有的数据总比另一部分所有的数据小,...原创 2020-02-11 23:40:42 · 505 阅读 · 0 评论 -
交换排序算法-冒泡排序
文章目录算法简介Java 实现时间复杂度空间复杂度算法稳定性 算法简介 冒泡排序(Bubble Sort)是一种比较简单的排序算法,它是一种稳定的排序算法 Java 实现 大致思路: 给出一个 int 数组从小到大排序,我们可以经过几次排序,每次排序都从第一个元素开始,通过两两冒泡的形式进行两个元素大小的比较,前者比后者大就交换一下二者位置,否则位置不变。这样每次排序之后都能找出当前排序中最大的那...原创 2020-02-10 14:30:18 · 464 阅读 · 0 评论 -
从数学归纳法到递归算法
文章目录数学归纳法(Mathematical Induction, MI)递推算法(Recursion method, RM)递归算法(Recursive algorithm, RA)由数学归纳法到递归算法 从数学归纳法到递归算法 数学归纳法(Mathematical Induction, MI) 简介 常用的数学证明方法,属于完全严谨演绎推理方法,常被用于证明给定命题在给定定义域范围内成立,...原创 2019-11-03 21:46:27 · 1492 阅读 · 0 评论 -
各类排序算法比较分析
文章目录各排序算法表格比较各类排序算法场景分析一些解释 各排序算法表格比较 基本上排序算法,基于选择的排序除了希尔,快排,归并,堆排序之外没啥实用性,只不过是练手的工具罢了,像 O(n^2) 这样过高的时间复杂度,已经失去了它的实用意义了 排序类别 排序算法 平均时间复杂度 最好情况 时间复杂度 最坏情况 时间复杂度 空间复杂度 稳定性 适用场景 交换排序 冒泡排序 O(n^2) ...原创 2020-03-26 23:08:38 · 771 阅读 · 0 评论 -
算法-动态规划DP
文章目录一道算法题看懂动态规划动态规划简介递归算法解法备忘录算法解法动态规划解法 递归和回溯 排序算法 算法应用 一道算法题看懂动态规划 动态规划简介 动态规划(Dynamic Programming)即 DP 算法,把多个阶段过程转化为一系列阶段问题,并利用各阶段之间的关系,逐个求解 一个楼梯有 n 层,你从楼底开始上到第 n 层,每次只能上 1 层或者上 2 层,你一共有多少种可能到达 n 层...原创 2020-03-02 23:14:05 · 528 阅读 · 0 评论 -
最优停止算法谈程序员的婚恋选择
文章目录应用场景算法解析实际场景 应用场景 最优停止问题又称为秘书问题,相亲问题,衍生出了 37% 法则。 一组数据在单向流动过程中,你希望选择这组数据中较好的一个,但是这组数据一旦流动经过你的眼前,你需要在这一瞬间选取它或者让数据继续流动等待选取下一个数据,一旦你选取了这个数据,那么这一组数据就会消失,也就是不能更换已经做出的选择。 当我们在完全不了解这一组数据的情况下,我们在何时做出数据选取才...原创 2019-12-05 22:14:03 · 874 阅读 · 1 评论