
数据结构与算法基础
o0Helloworld0o
怕是要翻水水哦
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Merge Sort及应用
123 定义merge_sort函数,将数组分为两部分A[left..mid]和A[mid+1..right],分别对这两部分排序(递归调用merge_sort函数),然后调用merge函数合并这两部分 void merge_sort( vector<int>& A, i原创 2018-07-27 14:53:40 · 1467 阅读 · 0 评论 -
Quick Sort及应用
算法原理 定义quick_sort函数,对A[left..right]进行排序 首先检查数组大小,若数组大小为1或为空,则直接返回 然后调用partition函数,返回pivot为数组中的某个位置,位于pivot之前的元素A[left..pivot-1]均小于s[pivot],位于pivot之后的元素s[pivot+1..right]均大于s[pivot] 最后递归调用quick_sort...原创 2018-07-27 15:14:51 · 323 阅读 · 0 评论 -
Heap Sort
完全二叉树左右孩子下标的计算 左图为常规版本(下标从1开始),右图为Heap Sort中使用的版本(下标从0开始) 维护最大堆性质 定义函数max_heapify,其作用为:在数组范围A[0..heap_size - 1]中,调整以节点i为根的子树,使之满足最大堆的性质 void max_heapify( vector<int> &A, int i, i...原创 2018-07-27 16:06:02 · 253 阅读 · 0 评论 -
栈的压入、弹出序列
nowcoder 栈的压入、弹出序列 设置两个指针p1 = 0, p2 = 0,建立栈s 遍历弹出序列popV,对于当前元素popV[p2] 情况1:栈s为空,或栈顶元素和popV[p2]不匹配,则尝试从pushV中压入新的元素 情况2:栈顶元素和popV[p2]匹配,则检查下一个元素,p2++ class Solution { public: bool IsPopOrder(v...原创 2018-07-27 16:11:59 · 210 阅读 · 0 评论 -
Dijkstra
图中有N个节点,编号为1到N,times[i]表示一条路径,是一个三元组,表示从节点times[i][0]传播到节点times[i][1]需要的时间为times[i][2](注意是单向路径) 给定一个源点K,求从K传播到其它所有节点所需要的最短时间(如果存在某个节点无法传播到,返回-1) 优先队列版AC代码 struct Edge { int to, cost; Edg...原创 2018-07-27 16:21:58 · 507 阅读 · 0 评论 -
Topological Sorting
LeetCode 207. Course Schedule 共有n门课程编号0到n-1,prerequisites[i]表示课程的先后关系,是一个二元组,prerequisites[i].second -> prerequisites[i].first,表示先上课程prerequisites[i].second,然后才能上课程prerequisites[i].first 判断所有课程是否...原创 2018-07-27 17:29:56 · 253 阅读 · 0 评论 -
Union Find / Kruskal's Algorithm
第1行为节点个数n和边数e,节点编号为1到n 接下来e行,分别表示相互连接的两个节点以及边的权重 当n为0时,输入结束 #include <stdio.h> #include <string.h> #include <vector&am原创 2018-07-27 19:08:42 · 486 阅读 · 0 评论 -
外部排序
123原创 2018-08-06 16:58:39 · 167 阅读 · 0 评论