算法
度心℃
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
树的常用术语
二叉树1)树有很多种,每个节点最多只能有两个子节点的一种形式称为二叉树。2)二叉树的子节点分为左节点和右节点。3)如果该二叉树的所有叶子节点都在最后一层,而且节点总数=2^n-1,n为层数,则我们称为满二叉树。4)如果该二叉树的所有叶子节点都在最后一层或者倒数第二层,而且最后一层的叶子节点在左边是连续的,倒数第二层的叶子节点在右边连续,我们称为完全二叉树。...原创 2021-08-19 15:05:47 · 222 阅读 · 0 评论 -
二叉树的前序中序后序遍历
概念前序遍历:先输出父节点,再遍历左子树和右子树中序遍历:先遍历左子树,再输出父节点,再遍历右子树。后序遍历:先遍历左子树,在遍历右子树,最后输出父节点。小结:看输出父节点的顺序。前序遍历1、先输出当前节点(初始的时候是root节点)2、然后如果左子节点不为空,则递归继续前序遍历。3、如果右子节点不为空,则递归继续前序遍历。中序遍历1、如果当前节点的左子节点不为空,则递归中序遍历。2、输出当前节点3、如果当前节点的右子节点不为空,则递归进行中序遍历。后序遍历1、如果当前节点的左子原创 2021-08-19 15:05:32 · 418 阅读 · 0 评论 -
线索化二叉树
线索化二叉树基本介绍1)n个节点的二叉链表中含有n+ 1 公式2n-(n-1)=n+1个空指针域,利用二叉树链表中的空指针域,存放指向该节点某种遍历次序下的前驱和后续节点的指针。2)这种加上了线索的二叉链表陈为线索链表,相应的二叉树称为线索二叉树,根据线索性质不同,线索二叉树分为前序线索二叉树、中序线索二叉树、后续线索二叉树。3)一个节点的前一个节点,称为前驱节点4)一个节点的后一个接待你,称为后续节点案例说明:当线索化二叉树后,Node节点的属性left和right,有如下情况:1)le原创 2021-08-19 15:05:15 · 141 阅读 · 0 评论 -
数据结构--栈
栈的介绍1):栈的英文名叫做:stack2):栈是一个先入后出的有序列表3):栈是限制线路列表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表。允许插入和删除的一端,称为栈顶,另外一端称为栈底。4):根据栈的定义可知,最先放入的元素在栈底,最后放入的元素在栈顶,而删除元素刚好相反,最后放入的元素最先删除,最先放入的元素最后删除。栈的应用场景:1、子程序的调用:跳往子程序前,会先将下个指令的地址存在栈堆中,直到子程序指向完毕后再从地址取出,以回来原来的程序。2、处理递归调用:和子程序原创 2021-07-18 20:01:52 · 132 阅读 · 0 评论 -
二分查找算法
二分查找对一个有序数组查找,涉及递归的方法二分查找思路1、首先先确定该数组中间的下标mid=(left+right)/22、然后让需要查找的数findVaue和arr[mid]比较2、1findValue>arr[mid],说明要查找的数在mid的右边,因此需要递归的向右查找。2、2findValue<arr[mid],说明要查找的数在mid的左边,因从需要递归向左查找。2、3findValue == arr[mid]说明找到,就返回什么时候结束递归?1、找到就结束递归2、递原创 2021-07-18 20:01:26 · 135 阅读 · 0 评论 -
斐波那契(黄金分割法)查找算法
1、黄金分割点是指把一条线段分割成两部分,是其中的一部分与全长之比等于另外一部分与这部分之比,取其前三位数字的近似值是0.6182、斐波那契数列{1,1,2,3,5,8,13,21,34,55}发现斐波那契数列的两个相邻的数比例,无线接近黄金分割值0.618斐波那契原理mid = low +F(k-1)-1low:数组最前面的索引F(k-1)的理解:F(k)=F(K-1)+F(K-2)可推导(F[k]-1) = (F[k-1]-1)+(F[k-2]-1)+1代码实现package co原创 2021-07-18 20:00:57 · 585 阅读 · 0 评论 -
插值查找算法介绍
对应前面的代码公式:mid = left + (indValue - arr[right])/(arr[right]-arr[left])*(right-left)一步定位代码实现package com.search;import java.util.Arrays;public class InsertValueSearch { public static void main(String[] args) {// int[] arr= new int[100];//.原创 2021-07-17 11:34:27 · 205 阅读 · 0 评论 -
哈希表详解(韩顺平)!!!
哈希表的基本介绍散列表(哈希表)是根据关键码值而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数就叫做散列函数,存放记录的数组就是散列表。图解如下:哈希表的结构:例题:有一个公司,当新员工来报道时,要求将改员工的信息加入(id,年龄,名字,住址),当输入该员工的id时,要求查找到该员工的所有信息。要求:不使用数据库,速度越快越好。使用哈希表来管理雇员信息...原创 2021-07-17 11:33:46 · 217 阅读 · 0 评论 -
线性查找算法
线性查找代码:package com.search;public class SeqSearch { public static void main(String[] args) { int arr[] = {1, 9, 11, -1, 34, 89}; int index = seqSearch(arr,-11); if (index == -1){ System.out.println("没有查找到!!");原创 2021-07-17 11:33:20 · 157 阅读 · 0 评论 -
八皇后问题(回溯算法)
八皇后问题概述:在8X8格上的国际象棋上放置8个皇后,即 :任意两个皇后都不能处于同一行,同一列或者同一斜线上,有多少种摆法?说明:理论上因该创建一个二维数组,但是实际上可以通过一个一维数组就可以解决问题,arr[8]={0,4,7,5,2,6,1,3}//对应arr下标表示第几行,即第几个皇后,arr[i]=val,val表示第i+1个皇后,放在第i+1行的第val+1列。代码实现:package com.recursion;//八皇后问题public class Queue8 {原创 2021-06-10 11:28:35 · 217 阅读 · 0 评论 -
时间频度介绍
**时间频度:**一个算法花费的时间与算法中语句执行次数成正比。对于时间频度来说,常数项可以忽略,低次项也可以忽略,时间复杂度:原创 2021-06-10 11:28:25 · 325 阅读 · 0 评论 -
冒泡排序详解
冒泡排序思想:通过下标从小到大开始,依次比较相邻元素,若发现逆序则交换,使较大的元素注解从前往后移。冒泡排序规则:1、一共进行数组的大小-1次大的循环2、每一趟排序的次数在逐渐的减少3、如果我们发现在某趟排序时,没有发生一次交换,可以几天结束循环;冒泡排序代码演示:package com.sort;import java.util.Arrays;public class BubbleSort { public static void main(String[] args) {原创 2021-06-10 11:28:10 · 214 阅读 · 0 评论 -
选择排序详解
**基本介绍:**选择式排序也属于内部排序,是从欲排序的数据中,按指定的规则选出某一元素,再依照规定交换位置后达到排序的目的。说明:1、选择排序一共有数组大小-1轮排序2、每1论排序,又是一个循环,2、1先假定当前这个数是最小数2、2然后和后面的每个数进行比较,如果发现有比当前更小的数,就重新确定最小数;2、3当遍历到数组的最后时,就得到本轮最小数和下标2、3交换代码演示:package com.sort;import java.text.SimpleDateFormat;impo原创 2021-06-10 11:28:00 · 146 阅读 · 0 评论 -
插入排序介绍
插入排序法介绍:插入排序属于内部排序法,是对于欲排序的元素以插入的方式寻找该元素的适当位置,以达到排序的目的。插入排序思想把n个待排序的元素看成一个有序表和一个无序表,开始时有序表中只包含一个元素,无序元素中包含n-1个元素,排序过程中每次从无序表中取出第一个元素,把他的排序码依次与有序码进行比较,将他插入到有序表中的适当位置,使之称为新的有序表。代码实现package com.sort;import java.util.Arrays;/** * 插入排序 */public cla原创 2021-06-10 11:27:51 · 191 阅读 · 0 评论 -
希尔排序详解(面试必要掌握!!!)
结论当需要插入的数是比较小的时候,后移的次数明显增加,对效率有影响。希尔排序基本思想希尔排序是把记录按下标按一定增量分组,对每组使用直接插入排序;随着增加量逐渐减少,每组包含的关键词越来越多,当增量减少到1时,整个文件恰好被分为一组,算法便终止。代码实现package com.sort;import java.util.Arrays;// 希尔排序public class ShellSort { public static void main(String[] args) {原创 2021-06-10 11:27:30 · 362 阅读 · 0 评论 -
快速排序详解(面试必会!!)
快速排序思想通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对两部分分别进行快速排序,整个过程可以递归进行,以达到整个数据变成有序序列代码实现package com.sort;import java.util.Arrays;public class QuickSort { public static void main(String[] args) { int[] arr={-9,78,0,23,-567原创 2021-06-10 11:27:03 · 162 阅读 · 0 评论 -
归并排序详解(韩顺平版,面试必考!!!)
基本思想代码实现package com.sort;import java.util.Arrays;class MergetSort { public static void main(String[] args) { int[] arr={8,4,5,7,1,3,6,2}; int temp[] = new int[arr.length];//归并排序需要一个额外的空间 mergeSort(arr,0,arr.length-1,temp原创 2021-06-10 11:26:30 · 259 阅读 · 0 评论 -
基数排序详解(面试必会!!)
基数排序基本思想将所有待比较数值统一为同样的数位长度,数位较短的数前面补零。具有稳定性排序介绍1、将每个元素的个位取出,然后看这个数放在那个对应的桶(一个一维数组)。·2、按照这个桶的顺序(就是一维数组的下标)依次取出数据,放入到原来的数组)。3、将每个元素的十位取出,看放在对应的那个桶4、按照这个桶的顺序(就是一维数组的下标)依次取出数据,放入到原来的数组)。5、将每个元素的百位取出,看放在对应的那个桶6、按照这个桶的顺序(就是一维数组的下标)依次取出数据,放入到原来的数组)。原创 2021-06-10 11:25:48 · 300 阅读 · 0 评论 -
约瑟夫问题
Josephu(约瑟夫、约瑟夫环)问题概述:设编号为1,2,3,……n的n个人围坐一圈,约定编号为K(1<k<n)的人从1开始报数,数到m的那个人出咧,他的下一位又从1开始报数,数到m的那个人又出列,以此类推,知道所有人都出列为止,...原创 2021-06-03 20:18:22 · 205 阅读 · 0 评论 -
队列与链表
数据结构线性结构:1、线性结构作为最常用的数据结构,其特点是数据元素之间存在一对一的线性关系。2、线性结构有两种不同的存储结构,即顺序存储和链式存储结构。顺序存储的线性表称为顺序表,顺序表中的存储元素是连续的。3、链式存储的线性表称为链表,链表中的存储元素不一定是连续的,元素节点中存放数据元素和相邻元素的地址信息。4、线性结构常见的有:数组、列表、链表和栈,非线性结构:非线性结构包括:二维数组,多维数组,广义表,树结构,图结构。稀疏数组基本介绍:当一个数组大部分元素为0,或者为同一个值的原创 2021-06-03 16:34:32 · 1511 阅读 · 0 评论
分享