
数据结构与算法
文章平均质量分 60
观看 尚硅谷数据结构与算法 的笔记
不爱编程的小白白
新星计划导师,全栈领域优质创作者,阿里云专家博主,CSDN内容合伙人,成长一夏挑战赛-优秀领军人物,创作之秋挑战赛-优秀领军人物。
展开
-
【动态规划】多段图最短路径(动图演示)
写在前面:多段图是一个有向的无环图。求解从起始点v0到终止点的最短路径的长度, 首先看一下这个问题是否具有最优子结构的性质。对于每一点来说,从v0 到它的最短路径有两种可能,分别是从v0直接到该点或者是从最短的前驱 节点开始到该节点。从这里可以看出有递归的性质,所以使用回溯的方法 也是可以解决的。即从终点开始,依次向前找到最短的路径。由于递归本 身所用的时间较长,并且在回溯的过程中存在重复的工作,所以使用动态规划更好。动图演示:多段图: 假设图G=(V,E)是一个带权的有向图,如果可以.原创 2022-05-24 06:45:00 · 14948 阅读 · 38 评论 -
看“图”有惊喜哦(图基本介绍 DFS BFS)
1.图基本介绍1.图的常用概念2.图的表示方式1.邻接矩阵2.邻接表3.快速入门案例2.图遍历1.深度优先遍历2.广度优先遍历原创 2022-04-29 23:01:08 · 1596 阅读 · 72 评论 -
【动态规划】——数塔(java版,超详图解)
个人主页:个人主页系列专栏:数据结构与算法数塔问题[问题描述]从数塔的顶层出发,在每一个结点可以选择向左走或向右走,直走到最底层,要求找出一条路径,使得路径上的数值和最大。问题分析:要求出路径上的数值和最大,只需求出“8"左边(12)和右边(15)的数塔谁最大即可。左边(12) 要求12这个数塔的路径上的数值和最大,只需求出“12"左边(3)和右边(9)的数塔谁最大 要求3这个数塔的路径上的数值和最大,只需求出“3"左边(8)和右边(10)的数塔......原创 2022-04-25 21:15:03 · 3398 阅读 · 27 评论 -
二分查找(java 超详图解 递归 以及其他查找排序算法)
1.堆排序2.快速排序3.归并排序4.冒泡排序5.选择排序6.顺序查找7.二分查找原创 2022-04-12 07:00:00 · 1758 阅读 · 36 评论 -
堆排序(超详细图解 java版)
堆排序基本介绍l) 堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为0(nlogn),它也是不稳定排序。2)堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆,注意:没有要求结点的左孩子的值和右孩子的值的大小关系。3)每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆4)大顶堆举例说明5)小顶堆举例说明6) 一般升序采用大顶堆,降序采用小顶堆堆排序基本思想堆排序的基本思想...原创 2022-04-09 17:27:53 · 14986 阅读 · 24 评论 -
求两个升序序列的中位数( 减治法)
题目:一个长度为L(L≥1)的升序序列S,处在第L/2(若为小数则去掉小数后加1)个位置的数称为S的中位数。例如,若序列S1=(11,13,15,17,19),则S1的中位数是15。两个序列的中位数是含它们所有元素的升序序列的中位数。例如,若S2=(2,4,6,8,20),则S1和S2的中位数是11。现有两个等长升序序列A和B,试实现一个在时间和空间两方面都尽可能高效的算法,找出两个序列A和B的中位数。解题图解:代码:public class SearchMid { ..原创 2022-04-01 20:10:38 · 1345 阅读 · 2 评论 -
最大字段和(分治法,递归,Java)
分析这里我们以数组 arr[]={-20,11,-4,13,-5,-2}; 为例求子区间及最大和,从结构上是非常适合分治法的,因为所有子区间[start, end]只可能有以下三种可能性:在[0, (arr.length-1)/2]这个区域内在[(arr.length-1)/2+1, arr.length-1]这个区域内起点位于[0, (arr.length-1)/2],终点位于[(arr.length-1)/2+1, arr.length-1]内以上三种情形的最大者,即为所求.原创 2022-03-31 21:38:35 · 2519 阅读 · 3 评论 -
快速排序法(java版,分治法,递归)
快速排序法介绍:快速排序(Quicksort)是对冒泡排序的一种改进。基本思想是:通过--趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列快速排序 法示意图:快速排序法代码实现:import java.util.Arrays;import java.util.Random;public class QuickSort {..原创 2022-03-27 21:15:26 · 1332 阅读 · 1 评论 -
螺旋方阵(列举法,分治法,java版,逆时针)
所谓“螺旋方阵”,是指对任意给定的N,将1到N×N的数字从左上角第1个格子开始,按顺时针螺旋方向顺序填入N×N的方阵里,在这里 我给大家写逆时针的分析:我们令行数为i 列数为j 从0开始计数 即0表示第一行 观察可知 1 2 3 二维数组 列不变 行数i递增 4 5 6 二维数组 列数j递增 行数变化 7 8 9 二维数组 列不变 行数i递减 10 11 12 二维数组 列不j递减 ...原创 2022-03-19 13:53:45 · 4453 阅读 · 0 评论 -
归并排序java(内附超详解图文讲解)
归并排序介绍:归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide- and-conquer)策略(分治法将问题分(divide)成一-些 小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之)。归并排序思想示意图1-基本思想:归并排序思想示意图2-合并相邻有序子序列:再来看看治阶段,我们需要将两个已经有序的子序列合并成一个有序序列,比如上图中的最后- -次合并,要将[4,5,7,8]和[1原创 2022-03-18 19:11:16 · 6697 阅读 · 0 评论 -
数组模拟环形队列java(数据结构与算法)
思路原创 2022-03-12 20:07:43 · 565 阅读 · 0 评论 -
java冒泡排序以及优化,并用vue+element在网页上进行可视化排序
java冒泡排序以及优化,并用vue+element在网页上进行可视化排序原创 2022-03-08 23:51:06 · 1373 阅读 · 2 评论 -
稀疏数组(五子棋)
package suanfa;public class xishuarr { public static void main(String[] args) { int chessArr1[][]=new int[11][11]; int sum=0; chessArr1[1][2]=1; chessArr1[2][3]=2; chessArr1[3][5]=1; chessArr1[5][7]=2; System.out.println("二维数组");.原创 2022-03-10 22:18:15 · 506 阅读 · 0 评论 -
顺序查找以及带哨兵的顺序查找java版本
import java.util.Arrays;import java.util.Random;class seqSearch { public static void main(String[] args) { seqSearch sq=new seqSearch(); //产生一个随机数组 Random r = new Random(); int arr[] = new int[10].原创 2022-03-10 18:44:02 · 565 阅读 · 0 评论 -
选择排序以及选择排序优化
1.普通选择排序 //普通选择排序 public static void sort1(int[] array){ int count = 0;//统计运行次数 int cnt = 0; //交换次数 for(int i=0;i<array.length-1;i++) { int min=array[i]; int minIndex=i; count++;原创 2022-03-10 18:23:35 · 387 阅读 · 0 评论