
算法与数据结构
对算法与数据结构的学习记录
Duckdan
这个作者很懒,什么都没留下…
展开
-
算法学习记录014_堆排序算法
package com.study.data.structures.sort; import java.util.Arrays; /** * 堆排序 * 二叉堆本质上是完全二叉树 * <p> * {4,6,8,5,9},利用最大堆对数组进行升序排列 * 当前结点下标为i,则该结点的左子结点是2*i+1,右子结点是2*i+2。 * 何为大顶堆? * 每个结点的值都大于或等于其左右孩子结点,成为大顶堆 */ public class HeapSort { public原创 2022-04-05 13:55:54 · 530 阅读 · 0 评论 -
算法学习记录013_斐波那契查找算法
package com.study.data.structures.search; import java.util.Arrays; /** * 斐波那契数列的方式进行有序数组的查找 * 斐波那契数列:{1,1,2,3,5,8,13,21,34,...} * f(n) = f(n-1)+f(n-2),推导出f(n)-1 = [f(n-1)-1] + [f(n-2)-1] + 1 * 任何一个数组长度为f(n)-1的数组,都可以通过斐波那契数列的原理进行分割下去,直到找到要查找的元素。 * 一个原创 2022-02-28 16:59:54 · 185 阅读 · 0 评论 -
算法学习记录012_插值查找
package com.study.data.structures.search; /** * 插值查找算法: * 优点:对于数据量较大,关键字分布比较均匀的查找表来说,采用插值查找,速度比较快 */ public class InterpolationSearch { public static void main(String[] args) { int[] array = new int[100]; for (int i = 0; i < 100;原创 2022-02-14 10:07:27 · 186 阅读 · 0 评论 -
算法学习记录011_二分查找
package com.study.data.structures.search; import java.util.ArrayList; import java.util.Arrays; import java.util.List; /** * 对有序数组进行二分查找 * {23, 45, 67, 86, 86, 90, 91} * 查找45: * 第一次查找:left=0,right=arr.length-1 * middleIndex = (0+7)/2=3 * middleValue原创 2022-01-19 19:04:50 · 431 阅读 · 0 评论 -
算法学习记录010_归并排序
方式1: package com.study.data.structures.sort; import java.util.Arrays; /** * 归并排序: */ public class MergeSort { //当数组长度小于阈值的时候就开始排序,可以通过修改阈值来调节排序速度,但是并不是越大越好 private final static int THRESHOLD = 2; public static int[] sort(int[] arr) {原创 2021-12-19 13:08:03 · 264 阅读 · 0 评论 -
算法学习记录009_快速排序
一、java版本 package com.study.data.structures.sort; import java.util.Arrays; /** * 快速排序 * int[] arr={9, 4, 2, 1, 3, 6, -11}; * 假设以index=(0+7)/2=3为基准,小于arr[3]=1的放到arr[3]=1的左边,大于arr[3]的放到arr[3]的右边。 * 第一次调用quickSort方法 * 0)传入待分组的数组arr,传入left=0和right=arr.le原创 2021-12-14 12:16:02 · 501 阅读 · 0 评论 -
算法学习记录008_希尔排序
一、java版本 package com.study.data.structures.sort; import java.util.Arrays; /** * 希尔排序 * 交换法: * 以长度为10的数组int[] arr = {9, 4, 6, 1, 5, 11, 32, 12, 8, -3};为例子 * 第一步: * step=10/2,将数组分为5个部分,每个部分各个元素之间下标间隔为5。 * 即index=0与index=5,index=1与index=6,index=2与inde原创 2021-12-13 10:06:14 · 1063 阅读 · 0 评论 -
算法学习记录007_排序算法之冒泡、选择、插入
一、冒泡排序 package com.study.data.structures.sort; import java.util.Arrays; /** * 冒泡排序 */ public class BubblingSort { public static void main(String[] args) { int[] arrays = new int[80000]; for (int i = 0; i < 80000; i++) {原创 2021-12-05 11:29:14 · 366 阅读 · 0 评论 -
算法学习记录006_深层递归
<script> /** * [1,2,[3,4]]=>{children:[{value:1},{value:2},children:[{value:3},{value:4}]]} * * */ function arrToObj(array){ let obj; if(Array.isArray(array)){ ob.原创 2021-07-09 14:50:06 · 161 阅读 · 0 评论 -
算法学习记录005_寻找字符串中连续最长字符以及个数
一、寻找最长 <script> function count(str){ let i = 0; let j = 0; let maxChar = ''; let maxCount = 0; while(i<str.length){ //当i指向的元素与j指向的元素不相等的时候,说明字符发生了变化原创 2021-07-09 14:14:20 · 335 阅读 · 0 评论 -
算法学习记录004_三种方式实现斐波那契数列
<script> //方式一: // function fbi(n){ // console.count("计数") // return n < 2 ? 1 : fbi(n-1) + fbi(n-2) // } //方式二,做缓存,减少递归次数 let cache = {} function fbi(n){ conso原创 2021-07-09 14:11:09 · 135 阅读 · 0 评论 -
算法学习记录003_链表-LinkList以及LruLinkList
一、LinkList实现链表 package yang.study.com.appcompletetextviewdemo; public class LinkList<T> { Node head; /** * 用于记录节点个数 */ int size; /** * 头部添加数据 * * @para...原创 2020-01-01 10:15:41 · 209 阅读 · 0 评论 -
算法学习记录002_树-哈夫曼树
一、运行结果 Node(data=null, weight=73) left:Node(data=null, weight=33) left:Node(data=null, weight=16) left:Node(data=a, weight=8) right:Node(data=null, weight=8) left:Node(data=g, weight=1) right:Node(dat...原创 2020-01-01 09:39:44 · 206 阅读 · 0 评论 -
算法学习记录001_栈-逆波兰表达式
用“栈”实现逆波兰表达式,“栈”的特点是先进后出。 一、运行结果 示例: 3+2*7-9*4 [3, 2, 7, *, +, 9, 4, *, -] 9+(3-1)*3+10/2 [9, 3, 1, -, 3, *, +, 10, 2, /, +] 二、源代码 package com.study.yang.genericparadigm;...原创 2019-12-31 14:12:06 · 232 阅读 · 1 评论