
数据结构与算法
算法基石。
Black.Spider
宝剑锋从磨砺出,梅花香自苦寒来
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
堆排序原理与C++实现
思路1.建堆(大根堆为例)(1)从倒数第一个非叶子节点开始,做下沉操作,直到根节点。(2)下沉操作,对父节点和其儿子节点做比较,若父节点最大,则结束,否则就下沉,然后对发生变化的儿子节点做同样的下沉操作,直到叶子节点。2.堆排序(1)将根节点与最后一个叶子节点互换位置;(2)对根节点做下沉操作。C++实现#include <iostream>#include <vector>#include <functional>using namespace原创 2020-07-03 18:11:41 · 241 阅读 · 0 评论 -
建堆的时间复杂度分析
现在常有两种建堆的方法,而这两种方法又有着不同的时间复杂度。下面分别陈述:(1)自顶向下的建堆方式这种建堆的方法具有O(n*log2n)的时间复杂度。从根结点开始,然后一个一个的把结点插入堆中。当把一个新的结点插入堆中时,需要对结点进行调整,以保证插入结点后的堆依然是大根堆。其中h = log2(n+1)-1,第k层结点个数为2k个(当然最后一层结点个数可能小于2h)。第k层的一个结点插入之...转载 2020-03-29 13:53:04 · 7099 阅读 · 1 评论 -
排序算法之冒泡排序
思路 依次比较两个相邻的元素,若前者较大则交换两个元素的位置。每一趟比较都能确定一个元素的位置(较大的),因此每趟需比较n-i次(n为元素个数,i为趟数),最坏情况下需要进行n(n-1) / 2次比较。最好情况只需n-1次比较。 以数组{1,2,0,5,9,3}为例:第一趟排序:1 0 2 5 3 9 元素9位置确定第二趟排序:0 1 2 3 5 9 元素5位置确定...原创 2019-10-06 16:59:58 · 414 阅读 · 0 评论 -
排序算法之选择排序
思路 选择排序的想法很朴实,就是每次都从剩余元素中选出最小的元素,然后与排好序的元素的下一个元素互换,剩余元素个数减一。 以数组{81, 9, 82, 5, 2, 1}为例:第一趟排序:{1},{ 9, 82, 5, 2, 81}第二趟排序:{1, 2},{ 82, 5, 9, 81}第三趟排序:{1, 2, 5},{ 82, 9, 81}第四趟排序:{1, 2, ...原创 2019-10-06 17:24:29 · 255 阅读 · 0 评论 -
排序算法之插入排序
思路 每一趟排序都是将未排序的第一个元素与已排序的元素的最后一个元素开始往前比较,如果已排序元素比它大,则已排序元素往后移动一位,如此直到找到第一个比它小的元素,插入到该元素之后的位置。 以数组{9, 8, 6, 0, 11, 10}为例:第一趟排序:8 9 6 0 11 10 插入8,比较1次第二趟排序:6 8 9 0 11 10 插入6,比较2次第三趟排序:0 ...原创 2019-10-06 18:36:01 · 265 阅读 · 0 评论 -
排序算法之快速排序
思路如下图所示,对于数组s={11,18,20,11,6,8},选择11作为关键字key,然后选择两个哨兵low和high分别从数组的首部和尾部出发,执行以下操作:循环判断尾部哨兵所在元素是否大于key,且low<high,若是则哨兵high–,循环继续;否则循环停止,执行s[low]=s[high],然后转到2。循环判断首部哨兵所在元素是否小于或等于key,且low<high...原创 2020-01-26 17:56:33 · 201 阅读 · 0 评论 -
数据结构之队列
像栈一样,队列也是一种线性...转载 2020-01-27 23:16:18 · 115 阅读 · 0 评论