DS(数据结构)与AG(算法分析)
文章平均质量分 80
njujames
这个作者很懒,什么都没留下…
展开
-
归并排序
/* * main.cpp * * Created on: 2010-9-7 * Author: yangyu *///归并排序#include #include using namespace std;// 归并排序中的合并算法void Merge(int a[], int left, int center, int len){ int *t = (int *) malloc((len-left+1) * sizeof(int)); //申请原创 2010-09-07 17:09:00 · 504 阅读 · 0 评论 -
非递归dfs算法
<br />都说现今内存不值钱了,哈,也就不考虑空间复杂度的问题了,弄了俩辅助数组,觉得解这题还是挺容易的,就是不知道有没有BUG。<br />问题描述:<br />假设图G采用邻接表存储,编写一个实现连通图G的深度优先遍历(从顶点v出发)的非递归算法。<br />算法思路:<br />就是深度优先的思路。同样是一个visited[]数组,标记已访问过的顶点。又用了一个_vertex[]数组,用于存放顶点。<br />算法实现:<br />#include <stdio.h><br />#inclu转载 2010-09-05 21:51:00 · 1025 阅读 · 0 评论 -
堆排序
堆排序/* * main.c * * Created on: 2010-9-7 * Author: yangyu */#include #define LeftChild(i) ( 2 * (i) + 1)void Swap(int *a, int *b) //按地址传送交换 pass-by-reference{ int temp; temp = *a; *a = *b; *b = temp;}void PercDown(int A[]原创 2010-09-07 14:57:00 · 479 阅读 · 0 评论 -
快速排序
//快速排序算法#include #include #include using namespace std;//快速排序int Partition(int num[],int i,int j) //调用Partition(num,low,high)时,对num[low...high]做划分,并返回基准记录的位置 { int pivot=num[i]; //用区间的第1个记录作为基准 while(i=pivot) //pivot相原创 2010-09-07 17:13:00 · 811 阅读 · 0 评论 -
插入排序
<br />插入排序算法:<br />插入排序的一个关键思想是:位置0到位置P-1上的元素是已排过序的。<br />插入排序的时间复杂度为:O(N2)。<br />#include <iostream>typedef int ElementType;void InsetionSort(ElementType A[], int N){ int j,P; ElementType Tmp; for (P = 1; P < N; P++) { Tmp = A[P]; fo原创 2010-09-07 20:46:00 · 496 阅读 · 0 评论 -
希尔排序
<br />使用希尔增量的排序例子:<br />使用希尔增量排序额最坏情形时的运行时间为:θ(N2)<br />#include <iostream>typedef int ElementType;void Shellsort(ElementType A[], int N){ int i,j,Increment; ElementType Tmp; for (Increment = N/2; Increment > 0; Increment /= 2) for (i = In原创 2010-09-07 21:00:00 · 523 阅读 · 0 评论 -
拓扑排序(图论)
<br />拓扑排序是对有向无环图的一种排序。表示了顶点按边的方向出现的先后顺序。如果有环,则无法表示两个顶点的先后顺序。在现实生活中,也会有不少应用例子,比如学校课程布置图,要先修完一些基础课,才可以继续修专业课。一个简单的求拓扑排序的算法:首先要找到任意入度为0的一个顶点,删除它及所有相邻的边,再找入度为0的顶点,以此类推,直到删除所有顶点。顶点的删除顺序即为拓扑排序。 很容易得到拓扑排序的伪代码: void TopSort(Graph g) { for (int i=0原创 2010-10-12 16:45:00 · 1502 阅读 · 0 评论 -
无权最短路径BFS(广度优先搜索)算法(图论)
广度优先搜索(BFS)算法类似于树中的层次搜索:从任意点s出发,先遍历与s相邻的点,然后再遍历于相邻的点相邻的点。注意有向图必须是顺方向的邻接点。为什么说广度优先搜索可以用来求无权最短路径呢?因为,广度优先搜索每次都会先发现距离s为k的所有顶点,然后才会发现距离s为k+1的所有顶点。 s为起始点。void BFS(Graph& g, Vertex& s) { queue q; for each vertex v in g { v.distance = INFINITY;原创 2010-10-13 17:06:00 · 13449 阅读 · 0 评论