随笔分类 - 算法
摘要:排序逻辑 构建大顶堆,将第一个元素和最后一个元素交换,然后在除去最后一个数的队列中构建大顶堆,然后再交换,直到大顶堆没有元素 排序之前必须直到二叉树的性质 长度为 n 的二叉树最后一个父亲节点为:n/2 第n个节点的左子节点:2n 第n个节点的右子节点:2n + 1 初始数据 调整为大顶堆 交换 再
阅读全文
摘要:排序逻辑 确认一个基准数,把比基准数大的放在右边,小的放在左边,递归下去实现排序 初始队列 第一轮 第二轮 代码示例 public static void quickSort(int[] arr,int start, int end){ if(start<end){ //以第一位为基准数 int s
阅读全文
摘要:排序逻辑 将一个队列递归均分为两个数组,再将两个数组按序归并为一个数组 初始队列 均分为两个队列 按序归并 代码示例(递归实现) /** * 归并排序: * 将一个数组递归均分为两个数组,再将两个数组归并为一个数组 * @param arr * @param start 数组范围 * @param
阅读全文
摘要:排序逻辑 希尔排序是在插入排序的优化,插入排序当一个小的数在右边的时候,以为插入排序只能交换相邻的数据,则需要很多次交换操作才能将前面序列保持有序,故希尔排序加入交换步长,能够交换相隔很远的数据,先队列排至大致有序,极大的提高了插入排序的效率 图示 交换排序 希尔排序 初始队列 步长为2 如果是直接
阅读全文
摘要:排序逻辑 每次遍历,保证前面的队列是有序的 初始队列 第一轮 第二轮 第三轮 第四轮 代码示例 public static void insertSort(int[] arr){ //从第二个数开始遍历所有的数字,每一次遍历保证前面的序列是有序的 for(int i=1;i<arr.length;i
阅读全文
摘要:排序逻辑 每一轮找出剩余队列中的最小值放在前面 初始队列 第一轮 第二轮 第三轮 代码示例 public static void selectSort(int[] arr){ for(int i=0; i<arr.length-1; i++){ int min = i; for(int j=i+1;
阅读全文
摘要:排序逻辑 每一轮找出剩余队里中最大的数,放在剩余队的最后 初始队列 第一轮排序 第二轮排序 第三轮排序 第四轮排序 代码示例 public static void bubbleSort(int[] arr){ for(int i=0;i<arr.length-1;i++){ for(int j=0;
阅读全文
摘要:BF算法又称暴力算法,非常容易理解,同时效率也很低 实现步骤 (1) 给定子串与主串 (2) 在主串上从头开始选取与子串等长的模式串 (3) 比较模式串与字串,如果不相等,则模式串后移一位 (4) 当模式串移动到某个位置,每个字符都是匹配时,比较结束 代码示例 /** * @param s1 主串
阅读全文
摘要:这是在《高性能 javascript》中看到的阶乘递归函数 function memfactorial(n){ if(!memfactorial.cache){ memfactorial.cache = { "0": 1, "1": 1 } } if(!memfactorial.cache.hasO
阅读全文