摘要: (一)排序基本概念: 根据排序过程中待排序文件存放的位置不同,可以把排序分为内部和外部排序两大类。在排序过程中,所有需要排序的数都在内存,并在内存中调整它们的存储顺序,称为内排序;在排序过程中,只有部分数被调入内存,并借助内存调整数在外存中的存放顺序排序方法称为外排序。内部排序适用于记录个数不很多的较小待排序文件的排序;外部排序则适用于记录个数太多不能一次全部放入内存的较大待排序文件的排序。(二)内部排序分类:交换排序:常用的交换排序方法有冒泡排序和快速排序。选择排序:常用的选择排序方法有直接选择排序、树型选择排序和堆排序。插入排序:主要的插入排序方法有直接插入排序、希尔排序、二分法插入排序. 阅读全文
posted @ 2012-03-28 16:14 爱也玲珑 阅读(3189) 评论(0) 推荐(2) 编辑
摘要: 多设置了一个ans变量,每次找到一个等于val的值,我就用它的序号覆盖ans,这样,由于我们的寻找方向是正确的,因此最后ans记录的序号,肯定就是我们需要的答案,同时,如果不存在,则ans已经初始为-1,因此,最后直接返回ans即可。看下面5个例子。第一,求任意一个i使得num[i]等于val,不存在返回-1;View Code int BinarySearch(int low, int high, int val){ int ans = -1; while(low <= high){ int mid = (low + high) / 2; if... 阅读全文
posted @ 2012-03-27 22:33 爱也玲珑 阅读(618) 评论(0) 推荐(0) 编辑
摘要: 二叉查找树是满足以下条件的二叉树:1.左子树上的所有节点值均小于根节点值,2右子树上的所有节点值均不小于根节点值,3,左右子树也满足上述两个条件。 二叉查找树的插入过程如下:1.若当前的二叉查找树为空,则插入的元素为根节点,2.若插入的元素值小于根节点值,则将元素插入到左子树中,3.若插入的元素值不小于根节点值,则将元素插入到右子树中。 二叉查找树的删除,分三种情况进行处理: 1.p为叶子节点,直接删除该节点,再修改其父节点的指针(注意分是根节点和不是根节点),如图a。 2.p为单支节点(即只有左子树或右子树)。让p的子树与p的父亲节点相连,删除p即可;(注意分是根节点和不是根节点... 阅读全文
posted @ 2012-03-27 18:00 爱也玲珑 阅读(40436) 评论(5) 推荐(4) 编辑
摘要: 带权图分为有向和无向,无向图的最短路径又叫做最小生成树,有prime算法和kruskal算法;有向图的最短路径算法有dijkstra算法和floyd算法。 生成树的概念:联通图G的一个子图如果是一棵包含G的所有顶点的树,则该子图称为G的生成树 生成树是联通图的极小连通子图。所谓极小是指:若在树中任意增加一条边,则 将出现一个回路;若去掉一条边,将会使之编程非连通图。生成树各边的权 值总和称为生成素的权。权最小的生成树称为最小生成树,常用的算法有prime算法和kruskal算法。 最短路径问题旨在寻找图中两节点之间的最短路径,常用的算法有:floyd算法和dijkstra算法。 构造... 阅读全文
posted @ 2012-03-26 22:30 爱也玲珑 阅读(57040) 评论(5) 推荐(12) 编辑
摘要: 并查集:(union-find sets)是若干个不相交集合,能够实现较快的合并和判断元素所在集合的操作,应用很多,如其求无向图的连通分量个数等。最完美的应用当属:实现Kruskal算法求最小生成树。并查集的精髓:1、make_set(x) 把每一个元素初始化为一个集合初始化后每一个元素的父亲节点是它本身,每一个元素的祖先节点也是它本身(也可以根据情况而变)。2、find_set(x) 查找一个元素所在的集合(有两种方法:朴素查找和采用路径压缩的方法查找,其中路径压缩有递归和非递归)查找一个元素所在的集合,其精髓是找到这个元素所在集合的祖先!这个才是并查集判断和合并的最终依据。判断两个元素是否 阅读全文
posted @ 2012-03-26 19:55 爱也玲珑 阅读(367) 评论(0) 推荐(0) 编辑
摘要: #include<iostream>using namespace std;struct node { int num; int val; struct node *next; };struct gpnode{ int data; struct node *link; };//由键盘输入生成图邻接表 struct gpnode *create_Link_GP(int n) //n是图中节点个数 { int seq, v; struct node *p; struct gpnode *gp = (struct gpnode *)mall... 阅读全文
posted @ 2012-03-26 11:21 爱也玲珑 阅读(614) 评论(0) 推荐(0) 编辑
摘要: STL是C/C++开发中一个非常重要的模板,而其中定义的各种容器也是非常方便我们大家使用。下面,我们就浅谈某些常用的容器。这里我们不涉及容器的基本操作之类,只是要讨论一下各个容器其各自的特点。STL中的常用容器包括:顺序性容器(vector、deque、list)、关联容器(map、set)、容器适配器(queue、stac)。1、顺序性容器(1)vector vector是一种动态数组,在内存中具有连续的存储空间,支持快速随机访问。由于具有连续的存储空间,所以在插入和删除操作方面,效率比较慢。vector有多个构造函数,默认的构造函数是构造一个初始长度为0的内存空间,且分配的内存空间是以2. 阅读全文
posted @ 2012-03-26 09:54 爱也玲珑 阅读(358) 评论(0) 推荐(0) 编辑
摘要: #include<iostream>using namespace std;#define LEN sizeof(struct node)typedef struct node *pnode;int n; //节点个数struct node{ char val; pnode lchild; pnode rchild; };//生成二叉树 pnode createBinaryTree(){ char ch; scanf("%c", &ch); //421##3##76##8#9## pnode root = (pnode)malloc(LEN);... 阅读全文
posted @ 2012-03-25 17:25 爱也玲珑 阅读(758) 评论(0) 推荐(0) 编辑
摘要: Static对函数的作用:当同时编译多个文件,所有未加static前缀的全局变量和函数都具有全局可见性。如果加了static,会对其他文件隐藏,利用static可以在不同的文件定义同名的函数和变量。Static对变量的作用有三个:1.和对函数的作用一样。2.保持变量的持久。存储在静态数据区的变量会在程序刚开始运行时就完成初始化,并且是唯一的一次初始化。存储在静态存储区的变量有两类:全局变量和static变量,和全局变量比起来,static可用控制变量的可见范围,说到底static还是用来隐藏。举例如下:#include<stdio.h>#include<stdlib.h> 阅读全文
posted @ 2012-03-24 19:39 爱也玲珑 阅读(544) 评论(0) 推荐(0) 编辑
摘要: (排序数组)题目:输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。要求时间复杂度是O(n)。如果有多对数字的和等于输入的数字,输出任意一对即可。例如输入数组1、2、4、7、11、15和数字15。由于4+11=15,因此输出4和11。、分析:如果我们不考虑时间复杂度,最简单想法是计算任一一个数字与其他n-1个数字的和,判断是否等于给定值。复杂度是O(n2)。由于该序列是升序数组,我们假设随意取数组中的两个数,如果和等于给定值,那么就是我们所找的两个数;如果小于给定值,很容易想到,更小的那个数应该更大,即下标应该更大,那么对应的数会更大;如果大于给定 阅读全文
posted @ 2012-03-24 16:39 爱也玲珑 阅读(3301) 评论(0) 推荐(0) 编辑