![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法相关
文章平均质量分 82
SEU_Calvin
慢慢来,才会更快。
展开
-
算法相关——Java排序算法之选择排序(六)
个人感觉选择排序是最接近人类思维的一种排序方法,因为我们在看到一个待排序列时,首先是从始至终找到一个最小的数放在第一个位置,再从剩下的数据中选出最小的放在第二个位置。选择排序的基本思想也是如此的。选择排序很明显空间复杂度为O(1),时间复杂度为O(n*n),选择排序是不稳定的。...原创 2017-02-27 21:53:14 · 1252 阅读 · 0 评论 -
算法相关——KMP算法最通俗易懂的解释
0. 前言一个字符串"BBCABCDABABCDABCDABDE"中是否包含另一个字符串"ABCDABD"? KMP就是最常用的字符串匹配算法之一。KMP有着优秀的时间复杂度O(m+n),网上有很多KMP算法的解释,但读起来都很费劲。直到读到Jake Boxer的文章,我才真正理解这种算法。下面我用自己的语言,试图写一篇比较好懂的KMP算法解释。1. 算法过程解释...转载 2017-03-15 18:03:39 · 3107 阅读 · 3 评论 -
算法相关——Java排序算法之快速排序(三)
0. 前言本系列文章将介绍一些常用的排序算法。排序是一个非常常见的应用场景,也是开发岗位面试必问的一道面试题,有人说,如果一个企业招聘开发人员的题目中没有排序算法题,那说明这个企业不是一个“正规”的企业,哈哈,虽然有点戏谑,但是也从侧面证明了排序算法的重要性。本文将介绍的是常见排序算法中的快速排序。3.快速排序3.1 基本思想快速排序是一种比较快的排......原创 2017-02-15 11:47:28 · 1311 阅读 · 2 评论 -
算法相关——Java排序算法之插入排序(四)
插入排序分为两种,一种是直接插入排序,一种是二分插入排序。首先直接插入排序的基本思想是将序列分为排序好的部分和待排序部分,将待排序部分中的数据一个个的和前面已经排序好的部分比较(逐个从后到前顺序比较)并插入到该部分的合适位置,从而实现有序。而二分插入排序则是对直接插入排序法比较过程的一个优化,即从顺序比较变成了二分查找比较。...原创 2017-02-18 09:25:41 · 1513 阅读 · 1 评论 -
算法相关——Java排序算法之冒泡排序(二)
0. 前言本系列文章将介绍一些常用的排序算法。排序是一个非常常见的应用场景,也是开发岗位面试必问的一道面试题,有人说,如果一个企业招聘开发人员的题目中没有排序算法题,那说明这个企业不是一个“正规”的企业,哈哈,虽然有点戏谑,但是也从侧面证明了排序算法的重要性。本文将介绍的是常见排序算法中的冒泡排序。2.冒泡排序2.1 基本思想冒泡排序也是一种简单的排序算法,基......原创 2017-02-14 13:48:04 · 1342 阅读 · 0 评论 -
算法相关——Java排序算法之桶排序(一)
桶排序是所有排序算法中最快、也是最简单的排序算法。基本思想是在知道所有待排元素的范围后,准备和这个范围同样数量的桶,并将元素放在对应的桶中,如待排元素为{3,1,5,9,6,5,0},就要准备10个桶标号为0到9(代码中对应一个数组的下标),将每个元素放入对应桶中,再将所有元素按顺序输出(代码中则按顺序将数组i下标输出arrary[i]次),即为{0,1,3,5,5,6,9}。...原创 2017-01-31 22:14:04 · 2121 阅读 · 1 评论 -
算法相关——Java排序算法之希尔排序(五)
希尔排序是对插入排序的一个改进,希尔排序首先把待排数列按照一定增量进行分割,比如{3,1,5,9,6,5,0,2,4,12}数列,我们首先设置增量为n/2=5,因此有了分块后5个子块,即{3,5},{1,0},{5,2},{9,4},{6,12},将每个子块进行插入排序(即第i位与第i+5位进行比较交换),初步排序结果为{3,0,2,4,6,5,1,5,9,12}。希尔排序再将增量逐渐减小,进行5/2=2的分块,即{3,2,6,1,9},{0,4,5,5,12},同理插入排序得...原创 2017-02-24 21:15:34 · 1220 阅读 · 1 评论 -
算法相关——Java排序算法之归并排序(八)
归并排序是指通过对若干个有序结点序列的归并来实现排序,所谓归并是指将若干个已排好序的部分根据算法合并成一个新的有序整体。比如两个有序的子序列array[low,...,mid]和array[mid+1,...,high],设置i,j两个指针指向low和mid+1,合并时依次比较array[i]和array[j]的值,取较小值记录复制到暂存序列temp[]中,在用p指向该暂存序列,每复制一次,让较小值的下标i或者j自增一次,同时p也自增一次...原创 2017-03-03 10:15:40 · 1302 阅读 · 0 评论 -
算法相关——Java排序算法之堆排序(七)
0. 前言本系列文章将介绍一些常用的排序算法。排序是一个非常常见的应用场景,也是开发岗位面试必问的一道面试题,有人说,如果一个企业招聘开发人员的题目中没有排序算法题,那说明这个企业不是一个“正规”的企业,哈哈,虽然有点戏谑,但是也从侧面证明了排序算法的重要性。本文将介绍的是常见排序算法中的堆排序。7 堆排序7.1 基本思想7.1.1 堆的概念堆是一种特殊形......原创 2017-02-28 21:53:03 · 1149 阅读 · 1 评论 -
数据结构——搜索树树、B-树、B+树
二叉搜索树满足以下几个特性(1)所有非叶子结点至多拥有两个儿子(Left和Right)(2)所有结点存储一个关键字(3)非叶子节点的左/右子树上的任意节点值都小/大于该节点上的值二叉搜索树的搜索从根节点开始,如果查询的关键字与结点的值相等则命中;否则比较要查询的关键字和该节点结点值的大小,根据大小进入左/右节点继续搜索;如果左节点或者右节点为空,则找不到相应的关键字。...原创 2017-04-22 20:29:21 · 1760 阅读 · 3 评论