算法总结
把学过的算法好好总结一遍
Vegetables_chicken
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
插入、冒泡、选择排序 区分O(n^2)
插入、冒泡、选择排序 区分 O(n^2) 这三个排序都是 n 方,然而我老是记错他们之间的名字,到时候考研卷子上写错了就凉凉 谨以此博客纪念我傻傻分不清楚他们的名字的岁月。 全篇以从小到大排序为例,数组从第arr[1]开始存储 1.插入排序 助记:从后向前插入,前面已有序 从前向后遍历,假设当前遍历的是第 i 个元素,那么前 i-1个已经有序,然后再将当前这个与前面的元素倒着回去比较,直到遇到比第 i 个小的则停止 void InsertSort(int arr[],int n) { for(int i=原创 2020-10-25 21:32:05 · 257 阅读 · 0 评论 -
归并排序
归并排序 1.归并的思想 虽然官方给的定义说归并是分治法,但是,我的理解是递归。 有句话说得好,人理解递推,神理解递归。 最短的三行代码也是最难的,因为牵扯到了回溯。 归并和快排都是分治,归并排序和快排不一样的是,快排只有向下的操作,而没有回溯。 还有就是,归并排序每次分割都是中点,而快排的分割是在左右指针相遇的地方。 话不多说,开始撸代码。。。 2.代码分析 (1)合并操作 对于一个左边一半和右边一半分别有序的数组,合并成一个新的整体有序的数组,需要注意的是,这里需要一个和原数组一样大的辅助空间。 i原创 2020-10-16 11:51:05 · 239 阅读 · 0 评论 -
理解快速排序
理解快速排序 1.对快速排序的理解 快排运用了分治的思想 举个例子说明分治 假设省长要给xx全省修路,省长把各市长叫过来说你去修路吧。修路的范围是我们省 然后市长又跟县长说,你们去修路吧 修路的范围是我们市 …… 最后无数农民工,他们再想向下吩咐的时候一看,哦豁,我就是最底层,把自己面前的路修好吧。 2.快排步骤 假设对区间 left 到 right 进行划分 (1).把区间最左边作为标兵,两个指针从两端开始向中间相向而行 右指针遇到比标兵小的,和左指针遇到的比标兵大的交换 注意!!右指针先动,这样可以原创 2020-10-15 13:09:49 · 210 阅读 · 0 评论 -
浅谈堆排序
浅谈堆排序 什么是堆 1.堆的特点 (1).堆是一颗完全二叉树 (2).堆的父节点大于左右子节点(大根堆)左右子节点大小无序 const int MaxSize=1000; int heap[MaxSize]; //下标从1开始 int n; //表示堆中的节点的个数,也是heap数组的长度 2.基本知识 对于一颗用数组(下标从1开始)存储的堆,假设某节点为 heap[ i ] 则父节点为 heap[ i / 2] 左儿子节点为 heap[ i * 2 ] 右儿子节点为 heap[ i原创 2020-10-14 19:52:13 · 301 阅读 · 0 评论
分享