数据结构与算法基础
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 · 1317 阅读 · 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 · 261 阅读 · 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 · 189 阅读 · 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 · 153 阅读 · 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 · 459 阅读 · 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 · 214 阅读 · 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 · 401 阅读 · 0 评论 -
外部排序
123原创 2018-08-06 16:58:39 · 133 阅读 · 0 评论