摘要: 快速排序的算法设计与分析 问题描述:设计并分析快速排序 【算法设计思想】 选择基准值:从待排序数组中选择一个元素作为基准值(pivot)。在这个示例中,选择了数组中的最后一个元素作为基准值。 分割数组:将数组分割为两部分,小于等于基准值的元素放在基准值的左边,大于基准值的元素放在右边。这一步骤称为分 阅读全文
posted @ 2024-05-30 19:53 zeta186012 阅读(2) 评论(0) 推荐(0) 编辑
摘要: 冒泡排序的算法设计与分析 问题描述:设计并分析冒泡排序算法 【算法设计思想】 遍历数组,从第一个元素到倒数第二个元素(因为最后一个元素不需要再比较,它已经是最大的了)。 在每次遍历过程中,再次遍历未排序部分的元素(从第一个到当前未排序部分的末尾),比较相邻的两个元素,如果顺序不正确,则交换它们的位置 阅读全文
posted @ 2024-05-30 11:34 zeta186012 阅读(2) 评论(0) 推荐(0) 编辑
摘要: 插入排序的算法设计与分析 问题描述:设计并分析插入排序算法 【算法设计思想】 开始排序:假定第一个元素已经排序(实际上,单个元素可以视为已排序状态),因此排序开始于数组的第二个元素。 选择未排序的元素:从未排序的部分取出第一个元素,我们称之为key。这个key是待插入到已排序序列中的元素。 比较和插 阅读全文
posted @ 2024-05-29 17:13 zeta186012 阅读(1) 评论(0) 推荐(0) 编辑
摘要: 判断是否为无向图 问题描述:设图G用邻接矩阵A[n+1,n+1]表示,设计算法以判断G是否是无向图。 【算法设计思想】 遍历矩阵 使用两层嵌套的 for 循环,外层循环变量 𝑖i 从 0 到 𝑛n,内层循环变量 𝑗j 从 0 到 𝑛n。 检查对称性 在内层循环中,检查矩阵的对称性,即判断 � 阅读全文
posted @ 2024-05-19 10:38 zeta186012 阅读(7) 评论(0) 推荐(0) 编辑
摘要: 求图的邻接顶点 问题描述:已知图G用邻接矩阵存储,设计算法以分别实现函数firstadj(G,v)和nextadj(G,v,w)。 【算法设计思想】 firstadj(G,V )函数: 遍历顶点 v 的所有可能邻接顶点(即矩阵 G[v][j] 的所有列)。 对于每一个顶点 j,检查 G[v][j] 阅读全文
posted @ 2024-05-18 17:02 zeta186012 阅读(8) 评论(0) 推荐(0) 编辑
摘要: 求有向图的度 问题描述:已知有向图G用邻接矩阵存储,设计算法以分别求解顶点vi的入度、出度和度。 【算法设计思想】 出度的计算 (getOutDegree) 遍历法:通过遍历邻接矩阵中顶点vi所在行的所有元素来计算vi的出度。对于每个元素matrix[vi][j],如果其值不为0(表示存在从顶点vi 阅读全文
posted @ 2024-05-17 20:51 zeta186012 阅读(14) 评论(0) 推荐(0) 编辑
摘要: 先序遍历森林 问题描述:设计算法输出先序遍历的森林节点及其所在的层次 【算法设计思想】 1. 数据结构定义 首先,定义二叉树节点的数据结构。每个节点包含存储数据的data字段,以及指向左右子节点的指针(lChild和rChild)。这种数据结构是二叉树和森林表示的基础。 2. 先序遍历单棵树 设计一 阅读全文
posted @ 2024-05-12 18:09 zeta186012 阅读(18) 评论(0) 推荐(0) 编辑
摘要: 森林的高度递归求解 问题描述:设计算法求解森林的高度 【算法设计思想】 两个函数,一个用于计算单个二叉树的高度,另一个用于计算二叉树森林(即一组二叉树)的最大高度。下面是对两个函数的详细解释: 1. treeHeight 函数 这个函数用于计算单个二叉树的高度。二叉树的高度定义为从根节点到最远叶子节 阅读全文
posted @ 2024-05-11 22:41 zeta186012 阅读(14) 评论(0) 推荐(0) 编辑
摘要: 双指针 双指针的定义 双指针,指的是在遍历对象的过程中,不是普通的使用单个指针进行访问,而是使用两个相同方向(快慢指针)或者相反方向(对撞指针)的指针进行扫描,从而达到相应的目的。换言之,双指针法充分使用了数组有序这一特征,在某些情况下可以简化一些运算。 快慢指针 快慢指针是双指针算法中的一种。不同 阅读全文
posted @ 2024-03-13 16:41 zeta186012 阅读(2) 评论(0) 推荐(0) 编辑