2012年11月15日
摘要:
这节,我们介绍基数排序和归并排序。一、基数排序基数排序(Radix Sort)的设计思想与前面介绍的各种排序方法完全不同。前面介绍的排序方法主要是通过关键码的比较和记录的移动这两种操作来实现排序的,而基数排序不需要进行关键码的比较和记录的移动。基数排序是一种借助于多关键码排序的思想,是将单关键码按基数分成多关键码进行排序的方法,是一种分配排序。下面用一个具体的例子来说明多关键码排序的思想。 一副扑克牌有 52 张牌,可按花色和面值进行分类,其大小关系如下: 花色:梅花<方块<红心<黑心 面值:2<3<4<5<6<7<8<9<10
阅读全文
posted @ 2012-11-15 18:47
laozhu1124
阅读(1737)
推荐(1)
摘要:
这节我们介绍堆排序。、堆排序在直接选择排序中,顺序表是一个线性结构,要从有n个记录的顺序表中选择出一个最小的记录需要比较n-1 次。如能把待排序的n个记录构成一个完全二叉树结构,则每次选择出一个最大(或最小)的记录比较的次数就是完全二叉树的高度, 即log2n次, 则排序算法的时间复杂度就是O (nlog2n) 。 这就是堆排序(Heap Sort)的基本思想。 堆分为最大堆和最小堆两种。最大堆的定义如下: 设顺序表sqList中存放了n个记录, 对于任意的i(0≤i≤n-1), 如果2i+1<n时有 sqList[i]的关键码不小于 sqList[2i+1]的关键码;如果 2i+2&l
阅读全文
posted @ 2012-11-15 15:41
laozhu1124
阅读(1381)
推荐(1)
2012年11月14日
摘要:
这节我们介绍直接插入排序和希尔排序算法,一、直接插入排序直接插入排序(direct Insert Sort)的基本思想是:顺序地将待排序的记录按其关键码的大小插入到已排序的记录子序列的适当位置。 子序列的记录个数从1开始逐渐增大,当子序列的记录个数与顺序表中的记录个数相同时排序完毕。设待排序的顺序表 sqList 中有 n 个记录,初始时子序列中只有一个记录sqList[0]。第一次排序时,准备把记录 sqList[1]插入到已排好序的子序列中,这时只需要比较 sqList[0]和 sqList[1]的大小,若 sqList[0]≤sqList[1],说明序列已有序,否则将 sqList[1]
阅读全文
posted @ 2012-11-14 19:56
laozhu1124
阅读(1540)
推荐(2)
摘要:
这节我们就用的最多的算法——排序发起重点的讨论。 常见的排序分为冒泡排序,快速排序,直接插入排序 ,希尔排序,基数排序 ,简单选择排序 ,堆排序 等等。一、冒泡排序冒泡排序(Bubble Sort)的基本思想是:将相邻的记录的关键码进行比较,若前面记录的关键码大于后面记录的关键码,则将它们交换,否则不交换。设待排序的顺序表 sqList 中有 n 个记录,冒泡排序要进行 n-1 趟,每趟循环均是从最后两个记录开始。 第 1 趟循环到第 2 个记录的关键码与第 1 个记录的关键码比较后终止, 第 2 趟循环到第 3 个记录的关键码与第 2 个记录的关键码比较结束后终止。一般地,第 i 趟循环到第
阅读全文
posted @ 2012-11-14 12:46
laozhu1124
阅读(1836)
推荐(4)
2012年11月13日
摘要:
这节,我们主要讨论,一下克鲁斯卡尔算法实现 最小生成树。克鲁斯卡尔算法的基本思想是:对一个有 n个顶点的无向连通网,将图中的边按权值大小依次选取,若选取的边使生成树不形成回路,则把它加入到树中;若形成回路,则将它舍 弃。如此进行下去,直到树中包含有 n-1条边为止。以下图 (a)为例说明用克鲁斯卡尔算法求无向连通网最小生成树的过程。 第一步:首先比较网中所有边的权值,找到最小的权值的边(D,E),加入到生成树的边集 TE 中,TE={(D,E)}。 第二步:再比较图中除边(D,E)的边的权值,又找到最小权值的边(A,D)并且不会形成回路,加入到生成树的边集 TE 中,TE={(A,D),(..
阅读全文
posted @ 2012-11-13 20:43
laozhu1124
阅读(2600)
推荐(4)
摘要:
好久, 没写blog了,今天,多写点。 上节说到那里了,是不是说图的遍历,这节,我们来通过图的具体的应用了。 首先,看看最小生成树的应用了。 什么是最小生成树了? 由生成树的定义可知,无向连通图的生成树不是唯一的,对连通图的不同遍历就得到不同的生成树。图 b 所示是图 (a)所示的无向连通图的部分生成树。 所谓最小生成树是如果是一个无向连通网, 那么它的所有生成树中必有一棵边的权值总和最小的生成树,我们称这棵生成树为最小代价生成树(Minimum Cost Spanning Tree).许多应用问题都是一个求无向连通网的最小生成树问题。例如,要在 n个城市之间铺设光缆, 铺设光缆的费用...
阅读全文
posted @ 2012-11-13 16:31
laozhu1124
阅读(3092)
推荐(3)
2012年11月9日
摘要:
这节,我们来看看一下什么了,来看看图的遍历吧!首先,搞清楚,图的遍历的基本的含义了。图的遍历是指从图中的某个顶点出发,按照某种顺序访问图中的每个顶点,使每个顶点被访问一次且仅一次。图的遍历与树的遍历操作功能相似。图的遍历是图的一种基本操作,并且图的许多其他操作都是建立在遍历操作的基础之上的。遍历示意图,如图所示:然而,图的遍历要比树的遍历复杂得多。这是因为图中的顶点之间是多对多的关系,图中的任何一个顶点都可能和其它的顶点相邻接。所以,在访问了某个顶点之后, 从该顶点出发, 可能沿着某条路径遍历之后, 又回到该顶点上。 例如,在下图中,由于图中存在回路,因此在访问了 A、B、C、D、E之后,沿着
阅读全文
posted @ 2012-11-09 12:54
laozhu1124
阅读(2126)
推荐(2)
2012年11月8日
摘要:
这节,我们来重点讨论一下 这个树形结构的相应的源代码的实现了。真的我们首先介绍一下无向图邻接表类的实现来说明图的邻接表类的实现。无向图邻接表的邻接表结点类 adjListNode<T>有两个成员字段,一个是1adjvex,存储邻接顶点的信息,类型是整型;一个是 next,存储下一个邻接表结点的地址,类型是 adjListNode<T>。adjListNode<T>的实现如下所示。public class adjListNode<T> { private int adjvex; //邻接顶点,连接定点 private adjListNode<
阅读全文
posted @ 2012-11-08 18:04
laozhu1124
阅读(1947)
推荐(3)
2012年11月7日
摘要:
这节,我们说一说,图的基本源代码的源代码实现。具体情况,请听我一一给大家娓娓道来。图的基本操作用一个接口来表示,为表示图的基本操作,同时给出了顶点类的实现。由于顶点只保存自身信息,所以顶点类 Node<T>很简单,里面只有一个字段 data。顶点的类 Node<T>的实现如下所示。 public Class Node<T> { private T data; //数据域 //构造器 public Node(T v) { data = v; } //数据域属性 public ...
阅读全文
posted @ 2012-11-07 11:28
laozhu1124
阅读(3054)
推荐(3)
2012年11月6日
摘要:
这篇文章,我们来讨论图的相关知识。一、究竟什么图装结构了,所谓的图是图状结构简称图,是另一种非线性结构,它比树形结构更复杂。树形结构中的结点是一对多的关系,结点间具有明显的层次和分支关系。每一层的结点可以和下一层的多个结点相关,但只能和上一层的一个结点相关。而图中的顶点(把图中的数据元素称为顶点)是多对多的关系,即顶点间的关系是任意的,图中任意两个顶点之间都可能相关。也就是说,图的顶点之间无明显的层次关系,这种关系在现实世界中大量存在。因此,图的应用相当广泛,在自然科学、社会科学和人文科学等许多领域都有着非常广泛的应用。例如搜索引擎,地图等等。如图所示:图(Graph)是由非空的顶点(Vert
阅读全文
posted @ 2012-11-06 14:45
laozhu1124
阅读(2315)
推荐(3)