摘要:
斐波那契查找算法 核心思想就是利用斐波那契公式来表示数组,将数组分割,通过比较分割点的大小 向左或者向右继续利用斐波那契公式来表示分割子数组 public class FibonacciSearch { public static int maxSize = 20; public static vo 阅读全文
摘要:
CopyOnWriteArrayList Java中多线程读写List,有两种选择: Vector CopyOnWriteArrayList Vector 中几乎所有读写操作都增加了synchronized, 意味着在多线程环境下,如果有多个线程同时想要操作这个 Vector,必须串行排队等着前面的 阅读全文
摘要:
基数排序 基本思想: 将所有待比较数值统一为同样的数位长度,数位较短的数前面补零。然后,从最低位开始,依次进行一次排序。这样从最低位排序一直到最高位排序完成以后, 数列就变成一个有序序列。 图文说明: 将数组 {53, 3, 542, 748, 14, 214} 使用基数排序, 进行升序排序。 代码 阅读全文
摘要:
归并排序 归并排序基本思想: 将原数组从中间分开,分成两个子数组,然后继续将子数组从中间分开,直到把所有子数组分解到只有 一个元素,此时分的过程就结束了 然后开始治,递归回退一层,将两个子数组合并成一个新的有序的数组,然后依次回退与其它子数组合并成 新的数组,直到合并成原始数组 归并排序基本思想示意 阅读全文
摘要:
快速排序 原理:递归+分治 从数组中选取一个基准点,将数组中小于这个基准点的元素放到基准点左边,大于这个基准点的元素放到右边 默认每次选取最后一个元素当作基准点,定义变量i,j分别指向数组的左端和右端前一个元素 i 向右移动扫描比基准点大的数, 如果比基准点小或等于则继续移动, j 向左移动扫描比基 阅读全文
摘要:
插入排序 思路: 1)将数组看成无序和有序两段,默认第一个元素在有序段,后面n-1个元素在无序段 2)每次取出无序段的第一个元素,在有序段找到合适的位置插入 3)如何找到合适的插入位置? 4)从有序段的最后一个元素向前遍历,假如每次遍历的元素所在索引就是插入位 insertIndex 5)如果是升序 阅读全文
摘要:
希尔排序 我们知道,插入排序的原理是将一个数组看成两段,一段有序的,一段无序的, 每次将无序的数字中第一个数在有序的一段中找到合适位置插入 插入排序有一个特征就是如果数组呈现接近有序,那么排序的速度就会很快 如:5, 1, 2, 7, 9, 8 只需将1插到5前面,2插到1、5中间,7不动,9不动, 阅读全文
摘要:
时间复杂度 时间频度 → 时间复杂度 语句执行的次数就是时间频度T(n) 时间频度 T(n) 不同,但时间复杂度可能相同,如: T(n)=n²+7n+6与T(n)=3n²+2n+2它们的T(n)不同,但时间复杂度相同,都为O(n²)。 时间复杂度计算方法: 用常数1代替运行时间中的所有加法常数T(n 阅读全文
摘要:
迷宫问题 实现算法:递归+回溯 初始迷宫 思路 map 表示地图 i, j 表示从地图的哪个位置开始出发(1,1) 如果小球能到map[6][5] 位置,则说明通路找到 约定:当map[i][j] 为 0 表示该点没有走过;当为 1 表示墙; 2 表示通路可以走;3 表示该点已经走过,但是走不通 在 阅读全文
摘要:
栈的应用(中缀表达式转逆波兰表达式) 思路: 因为中缀表达式对于操作符的优先级很不好计算,就将中缀转成计算机更容易识别的后缀表达式 中缀表达式转后缀表达式的思路步骤分析: 初始化两个栈:运算符栈s1和存储中间结果的栈s2 从左至右扫描中缀表达式 遇到操作数时,将其压入s2 遇到运算符时: 1.如果s 阅读全文