随笔分类 -  Algorithm

摘要:KMP算法 我们知道常规的暴力匹配子串解题思路是 从父串每一个位置向后探查子串长度个字符,与子串一一匹配,如果中途出现不匹配字符则提前停止探查,继续从父串的下一个位置向后探测,父串每次匹配失败,都是向后移动一个位置,在进行探测,这样的效率很低。 可以看到当匹配到最后一个字符时,匹配失败。然后父串索引 阅读全文
posted @ 2021-03-22 22:45 编程の小白 阅读(89) 评论(0) 推荐(0)
摘要:斐波那契查找算法 核心思想就是利用斐波那契公式来表示数组,将数组分割,通过比较分割点的大小 向左或者向右继续利用斐波那契公式来表示分割子数组 public class FibonacciSearch { public static int maxSize = 20; public static vo 阅读全文
posted @ 2021-03-15 13:00 编程の小白 阅读(75) 评论(0) 推荐(0)
摘要:基数排序 基本思想: 将所有待比较数值统一为同样的数位长度,数位较短的数前面补零。然后,从最低位开始,依次进行一次排序。这样从最低位排序一直到最高位排序完成以后, 数列就变成一个有序序列。 图文说明: 将数组 {53, 3, 542, 748, 14, 214} 使用基数排序, 进行升序排序。 代码 阅读全文
posted @ 2021-03-13 15:46 编程の小白 阅读(72) 评论(0) 推荐(0)
摘要:归并排序 归并排序基本思想: 将原数组从中间分开,分成两个子数组,然后继续将子数组从中间分开,直到把所有子数组分解到只有 一个元素,此时分的过程就结束了 然后开始治,递归回退一层,将两个子数组合并成一个新的有序的数组,然后依次回退与其它子数组合并成 新的数组,直到合并成原始数组 归并排序基本思想示意 阅读全文
posted @ 2021-03-12 23:22 编程の小白 阅读(81) 评论(0) 推荐(0)
摘要:快速排序 原理:递归+分治 从数组中选取一个基准点,将数组中小于这个基准点的元素放到基准点左边,大于这个基准点的元素放到右边 默认每次选取最后一个元素当作基准点,定义变量i,j分别指向数组的左端和右端前一个元素 i 向右移动扫描比基准点大的数, 如果比基准点小或等于则继续移动, j 向左移动扫描比基 阅读全文
posted @ 2021-03-12 08:57 编程の小白 阅读(133) 评论(0) 推荐(0)
摘要:插入排序 思路: 1)将数组看成无序和有序两段,默认第一个元素在有序段,后面n-1个元素在无序段 2)每次取出无序段的第一个元素,在有序段找到合适的位置插入 3)如何找到合适的插入位置? 4)从有序段的最后一个元素向前遍历,假如每次遍历的元素所在索引就是插入位 insertIndex 5)如果是升序 阅读全文
posted @ 2021-03-11 18:37 编程の小白 阅读(71) 评论(0) 推荐(0)
摘要:希尔排序 我们知道,插入排序的原理是将一个数组看成两段,一段有序的,一段无序的, 每次将无序的数字中第一个数在有序的一段中找到合适位置插入 插入排序有一个特征就是如果数组呈现接近有序,那么排序的速度就会很快 如:5, 1, 2, 7, 9, 8 只需将1插到5前面,2插到1、5中间,7不动,9不动, 阅读全文
posted @ 2021-03-11 18:29 编程の小白 阅读(123) 评论(0) 推荐(0)
摘要:时间复杂度 时间频度 → 时间复杂度 语句执行的次数就是时间频度T(n) 时间频度 T(n) 不同,但时间复杂度可能相同,如: T(n)=n²+7n+6与T(n)=3n²+2n+2它们的T(n)不同,但时间复杂度相同,都为O(n²)。 时间复杂度计算方法: 用常数1代替运行时间中的所有加法常数T(n 阅读全文
posted @ 2021-03-10 17:02 编程の小白 阅读(598) 评论(0) 推荐(0)