Algorithm
zwzsdy
升级打怪中...
展开
-
KMP算法入门——保证你会
KMP匹配算法,笔者在之前就有过研究,看了网上很多博客,但是还是懵懵懂懂,今天又拿起来重新研究,终于是搞懂了计算方法以及原理。 这里附上一篇很好的博客,笔者正是通过这个,懂得了next的计算。kmp的next数组值得求法下面开始简单讲解一下: 模式串pattern=“abaabcac”——我们该如何求它的next数组呢?为了方便理解,我们数组下标从1开始。相信你从网上其他很多资料对...原创 2018-04-10 15:59:53 · 253 阅读 · 0 评论 -
插入排序——Java
具体解释看: 插入排序总结自己写的Java代码: /** * 插入排序思想:从第二个数开始不断向前比较,如果小于前一个数,且大于前前一个数,则将前一个数与当前数交换 * 这里的实现思路是,从当前数开始向前比较,每次连续满足小于前一个数时,将前一个数后移到当前位置,将所有大于当前数的 * 值全部后移,直到找到插入位置。 */ pub...原创 2018-04-23 12:57:01 · 157 阅读 · 0 评论 -
冒泡排序——Java
给出代码:/** * 冒泡排序思想在于每一轮比较,都会将这一轮最大的放到最后,第一轮是所有数最大,第二轮是所有数次大.... * 每一轮都会少比较一次,直到最后得到最终结果。 * 时间效率O(N^2) */ public static void bubbleSort(int []arr) { int length=arr.le...原创 2018-04-23 13:09:53 · 296 阅读 · 0 评论 -
选择排序——Java
选择排序类似于冒泡,但是不要混淆了。两者虽然最坏时间效率相同,但是在实际使用中,选择排序更快。/** *选择排序思想与冒泡很像,但是区别在于选择排序是记录最大值的下标,然后在外层交换。两者的最坏时间效率都是O(N^2) *但是相对来说,在平时使用中,选择排序的效率高于冒泡排序 */ public static void selectSort(int ar...原创 2018-04-23 19:22:38 · 162 阅读 · 0 评论 -
归并排序——Java
为了方便起见,程序将分与治写在同一个函数中,并且部分代码不合理,比较消耗资源,但是胜在程序容易理解。/** * 归并排序是一种分治算法,思想在于分而治之,一下是测试50000个随机数时,排序效率: * (其他两个排序代码请见以前的文章) * 冒泡排序用时:5370 * 归并排序用时:19 * 选择排序用时:1352 */ ...原创 2018-04-23 21:49:59 · 217 阅读 · 0 评论 -
快速排序——Java
快速排序是一种很优秀的经典排序算法。 下面是Java代码实现,注意枢纽元的选择!/** * 快速排序基于分治的思想,同时,此处选取枢纽元也有一定讲究,并不是你经常看见的直接选取最左边或者最右边的元素 * 作为枢纽元。而是采用更为“安全”的方式。你可以这样理解:如果使用快速排序的数组已经是有序的,那么此时依旧采用 * 原始的枢纽元选取,时间效率将急剧下降(O(...原创 2018-04-24 14:47:09 · 179 阅读 · 0 评论 -
希尔排序——Java
希尔排序是八大经典排序算法之一,但是它不是稳定算法,因为它并不是像插入排序,规规矩矩的进行比较,而是采用激进的增量策略。但是,这个增量却是是它成为第一批冲破O(N^2)时间限制的算法之一。希尔排序实际上是改良的直接插入排序直接上代码: /** * shell排序是对插入排序的一种改进,它的效率与选择的增量有关(这里为了测试,采用最简单的) * 该排序在效率...原创 2018-04-24 22:57:19 · 238 阅读 · 0 评论