算法
小金刚-码奴只知前进
追一个追不到的人,做一个做不完的梦。
展开
-
前中后序遍历二叉树
前中后序遍历二叉树 前中后序遍历是查找二叉树的一种规定顺序。简介前中后序: 前:从二叉树根部开始,优先输出根节点,在依次遍历左、右支。(根左右) 中:从二叉树根部开始,优先遍历左支,直至没有左支(或已输出)输出当前根节点,最后遍历右支。(左根右) 后:从二叉数根部开始,优先遍历左支,再遍历右支,最后输出没有左右支(或已输出)的根节点。(左右根)算法思想:利用递归,对每一个节点/子节点进行遍历直至节点为空。递归就没啥好说的 ,直接看代码及注释。算法代码:/**二叉树 结构体 *原创 2021-03-23 20:29:45 · 245 阅读 · 0 评论 -
归并排序
归并排序算法目的:将无序数列排为有序数列。动态演示:.算法思想:利用分治法,将待排序数组不断细分,最后利用递归从小至大合并回原来摸样。算法代码:时间 O(n*log n) 空间O(n)#include<iostream>#include<vector>using namespace std;//归并排序 void guibing(vector<int>& arr) { int len = arr.size(); //拆终点判原创 2021-03-23 15:15:57 · 121 阅读 · 0 评论 -
快速排序
快速排序算法目的: 一种将无序数组的某个区间范围内的元素排列成有序的。算法思想: 通过递归与分治思想完成算法 分治:将待排序数组区间不断缩小 递归:对缩小的区间再进行递归排序算法主要分两部分:1、先将数组相对数组某一个元素分为两部分(前大后小 --由排序递增递减而定 )先将对比值取出设定左右索引 分别从左遍历、从右遍历 (结束条件 : 左索引不小于右索引 )当其值不满足规定时 交换两值将对比值放入左右索引的位置2、将这左右两部分数组,进行递归操作 (递归终止条件为左索引初原创 2021-03-22 16:44:43 · 129 阅读 · 0 评论 -
堆排序
堆排序算法目的:利用堆的数据结构实现排序。算法思想:堆排序是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:从根节点出发的任意一条之路都是有序的(顺序由堆类别而定)。两部分:建堆和拆堆建堆:从堆尾增加元素。比较其所在支路的前辈元素,将其交换至适当位置。拆堆:取走对顶元素(更具建立过程可知,堆顶肯定最大或最小)将堆尾元素放入堆顶从堆顶向下判断放入适当的位置(每次只用判断其与其左右子树较大或较小的值进行交换)(相当于重组堆,使其还是大原创 2021-03-16 14:02:55 · 723 阅读 · 5 评论 -
希尔排序
希尔排序算法目的:将无序序列变得有序,其算法算是普通插入排序的优化。解决插入排序在最坏情况的移动次数太多。算法思想:将整个无序序列,按一个不断缩小的缩量(对半缩)分组,在每个组内进行插入排序。算法代码:时间 O(log n * n ) 空间O(1)#include<iostream>#include<vector>using namespace std;//希尔排序算法函数void xier_sort(vector<int>& num原创 2021-03-12 16:05:09 · 766 阅读 · 0 评论 -
简单动态规划
简单动态规划简单背包问题 :假设你要去野营。你有一个容量为6磅的背包,需要决定该携带下面的哪些东西。其中每样东西都有相应的价值,价值越大意味着越重要:1 水(重3磅,价值10);2 书(重1磅,价值3);3 食物(重2磅,价值9);4 夹克(重2磅,价值5);5 相机(重1磅,价值6)。请问携带哪些东西时价值最高?算法思想:两部分:第一部分: 细分背包,将背包从最小单元逐渐增加满包。第二部分: 增加物品,将物品个数从单一逐渐增加到全部。第一部分:主要是分析背包所能有的大小原创 2021-03-11 23:27:13 · 1318 阅读 · 0 评论 -
二分法查找
二分法查找算法目的: 其输入是一个有序的元素列表。如果要查找的元素包含在列表中,二分查找返回其位置;否则返回-1。算法思想: 通过折中(二分),缩小其被查找的范围,来查询其值的位置。在数据量较大时,更适用。设定三个索引,分别为 L (左边界索引) 、R (右边界索引)、 LR (中间索引) 将中间索引 LR 所对应的数组值与查找值 k 进行比较当其值相等时 ----表示找到其位置 返回索引LR当不相等时 判断A[LR] 是 比 k 大还是小通过判断结果更新 左右索引当左索引(L)原创 2021-03-11 23:20:35 · 1241 阅读 · 0 评论 -
选择排序
选择排序算法选择排序的思想分析及图解…选择排序:(时间复杂度)(稳定性)算法思想:记录待排序数组的第一个元素值和其索引,向后遍历判断他是不是最小值(最大值)如果不是,则更新最小值和其所在位置索引遍历结束后,若索引更新,则交换首元素与更新后索引位置的值接下来的待排序数组为除开第一个元素,剩下的数组,按上述相同方法选择出 后替换直至待排数组大小为一,结束选择排序动态演示:代码:#include<iostream>#include<vector>using原创 2020-12-22 03:56:49 · 1286 阅读 · 1 评论 -
插入排序
插入排序算法插入排序的思想分析及图解…插入排序:(时间复杂度)(稳定性)算法思想:从数组中第二个元素开始,与前面的有序数列元素依次比较,当满足大于前者小于后者时插入其中(若到有序树列首部,则插入队首)重复上述直至遍历到数组末尾插入排序动态演示:代码:#include<iostream>#include<vector>using namespace std;//插入函数定义void insert_sort(vector<int> &ar原创 2020-12-22 03:46:21 · 955 阅读 · 1 评论 -
冒泡排序
冒泡排序算法冒泡排序的的思想分析及图解…冒泡排序:(时间复杂度)(稳定性)算法思想:遍历比较两个相邻元素的大小,按一个比较规则交换遍历一轮后,得到一个最大/最小元素 ,在数组最前端/最后端按第一步遍历余下的(n-1)个元素,直至余下元素个数为1为止,排序结束冒泡排序过程演示:代码:#include<iostream>#include<vector>using namespace std;//排序类class SORT{public: //原创 2020-12-22 03:26:57 · 1053 阅读 · 1 评论 -
递归 汉诺塔
汉诺塔内涵数据结构为: 栈(先进后出) 算法思想: 递归(调用函数自身)汉诺塔 (输出移动过程:展示递归)题目:在经典汉诺塔问题中,有 3 根柱子及 N 个不同大小的穿孔圆盘,盘子可以滑入任意一根柱子。一开始,所有盘子自上而下按升序依次套在第一根柱子上(即每一个盘子只能放在更大的盘子上面)。移动圆盘时受到以下限制:(1) 每次只能移动一个盘子;(2) 盘子只能从柱子顶端滑出移到下一根柱子;(3) 盘子只能叠在比它大的盘子上。请编写程序,表示将所有盘子从第一根柱子移到最后一根柱子的过程。原创 2020-12-08 23:03:53 · 1526 阅读 · 0 评论