huangfox

冰冻三尺,非一日之寒!

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
上一页 1 ··· 4 5 6 7 8 9 10 11 12 ··· 14 下一页

2012年6月30日

摘要: 一)定义堆排序利用了大根堆(或小根堆)堆顶记录的关键字最大(或最小)这一特征,使得在当前无序区中选取最大(或最小)关键字的记录变得简单。(1)用大根堆排序的基本思想① 先将初始文件R[1..n]建成一个大根堆,此堆为初始的无序区② 再将关键字最大的记录R[1](即堆顶)和无序区的最后一个记录R[n]交换,由此得到新的无序区R[1..n-1]和有序区R[n],且满足R[1..n-1].keys≤R[n].key③ 由于交换后新的根R[1]可能违反堆性质,故应将当前无序区R[1..n-1]调整为堆。然后再次将R[1..n-1]中关键字最大的记录R[1]和该区间的最后一个记录R[n-1]交换,由此得 阅读全文
posted @ 2012-06-30 18:43 huangfox 阅读(653) 评论(0) 推荐(0) 编辑

2012年6月29日

摘要: 一)选择排序定义选择排序(Selection Sort)的基本思想是:每一趟从待排序的记录中选出关键字最小的记录,顺序放在已排好序的子文件的最后,直到全部记录排序完毕。常用的选择排序方法有简单选择排序和堆排序。二)简单选择排序的实现(java)package com.fox;import java.util.Random;public class SelectionSort { public static void sort(int[] a) { for (int i = 0; i < a.length; i++) { int min = a[i]; int loc = i; f... 阅读全文
posted @ 2012-06-29 11:23 huangfox 阅读(293) 评论(0) 推荐(0) 编辑

摘要: 一)定义快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序。它采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod)。(1) 分治法的基本思想分治法的基本思想是:将原问题分解为若干个规模更小但结构与原问题相似的子问题。递归地解这些子问题,然后将这些子问题的解组合为原问题的解。(2)快速排序的基本思想设当前待排序的无序区为R[low..high],利用分治法可将快速排序的基本思想描述为:①分解:在R[low..high]中任选一个记录作为基准(Pivot),以此基准将当前无序区划分为左、右两个较小的子区间R[low..pivotpos-1)和R 阅读全文
posted @ 2012-06-29 11:05 huangfox 阅读(502) 评论(0) 推荐(0) 编辑

摘要: 一)定义将被排序的记录数组R[1..n]垂直排列,每个记录R[i]看作是重量为R[i].key的气泡。根据轻气泡不能在重气泡之下的原则,从下往上扫描数组R:凡扫描到违反本原则的轻气泡,就使其向上"飘浮"。如此反复进行,直到最后任何两个气泡都是轻者在上,重者在下为止。冒泡排序属于交换排序,交换排序主要是根据记录的关键字的大小,将记录交换来进行排序的。交换排序的特点是:将关键字值较大的记录向序列的后部移动,关键字较小的记录向前移动。交换排序方法包括冒泡排序和快速排序。二)冒泡排序的实现(java)package com.fox;import java.util.Random;p 阅读全文
posted @ 2012-06-29 08:53 huangfox 阅读(392) 评论(0) 推荐(0) 编辑

2012年6月28日

摘要: 一)定义希尔排序( shell sort )是 D .L.希尔( D.L.Shell )提出的“缩小增量”的排序方法。它的作法不是每次一个元素挨一个元素的比较。而是初期选用大跨步(增量较大)间隔比较,使记录跳跃式接近它的排序位置;然后增量缩小;最后增量为 1 ,这样记录移动次数大大减少,提高了排序效率。二)希尔排序的实现(java)public static void sort02(int a[]) { double d1 = a.length; while (true) { d1 = Math.ceil(d1 / 2); int d = (int) d1; //步长 for ... 阅读全文
posted @ 2012-06-28 17:23 huangfox 阅读(363) 评论(0) 推荐(0) 编辑

摘要: 一)定义直接插入排序( straight insertion sort )是一种最简单的排序方法。它的基本操作是将一个记录插入到一个长度为 m (假设)的有序表中,使之仍保持有序,从而得到一个新的长度为 m + 1 的有序表。例如:二)插入排序实现(java)// 升序 public static void sort(int[] a) { for (int i = 1; i < a.length; i++) { int j = i; int temp = a[j]; while (j > 0 && temp < a[j - 1]) { a[j] = a[j - 阅读全文
posted @ 2012-06-28 15:28 huangfox 阅读(374) 评论(0) 推荐(0) 编辑

摘要: 一)排序的定义所谓排序,就是要整理文件中的记录,使之按关键字递增(或递减)次序排列起来。其确切定义如下:输入:n个记录R1,R2,…,Rn,其相应的关键字分别为K1,K2,…,Kn。输出:Ril,Ri2,…,Rin,使得Ki1≤Ki2≤…≤Kin。(或Ki1≥Ki2≥…≥Kin)。二)排序的分类1.按是否涉及数据的内、外存交换分在排序过程中,若整个文件都是放在内存中处理,排序时不涉及数据的内、外存交换,则称之为内部排序(简称内排序);反之,若排序过程中要进行数据的内、外存交换,则称之为外部排序。注意:内排序适用于记录个数不很多的小文件外排序则适用于记录个数太多,不能一次将其全部记录放人内存的大 阅读全文
posted @ 2012-06-28 14:31 huangfox 阅读(714) 评论(0) 推荐(0) 编辑

摘要: 首先需要说明的问题:对于B树有人说是bTree,有人说是b-Tree,在本文我们统一使用英文描述(bTree、b-Tree、b+-Tree、b*-Tree),减少歧义。我理解bTree为二叉树,b-Tree、b+-Tree、b*-Tree为多叉树,且b+-Tree为b-Tree的变种,b*-Tree为b+-Tree的变种。我更倾向于将b树理解为b-Tree(有没有人读成b减树吧!?),而bTree就读成二叉树。一)b-Treeb-Tree是一种多路搜索树:定义任意非叶子结点最多只有M个儿子;且M>2;根结点的儿子数为[2, M];除根结点以外的非叶子结点的儿子数为[M/2, M];每个结 阅读全文
posted @ 2012-06-28 14:29 huangfox 阅读(836) 评论(0) 推荐(0) 编辑

摘要: 一)AVL定义在计算机科学中,AVL树是最先发明的自平衡二叉查找树。在AVL树中任何节点的两个子树的高度最大差别为一,所以它也被称为高度平衡树。查找、插入和删除在平均和最坏情况下都是O(logn)。增加和删除可能需要通过一次或多次树旋转来重新平衡这个树。AVL树得名于它的发明者G.M. Adelson-Velsky和E.M. Landis,他们在1962年的论文《An algorithm for the organization of information》中发表了它。节点的平衡因子是它的左子树的高度减去它的右子树的高度(有时相反)。带有平衡因子1、0或 -1的节点被认为是平衡的。带有平衡因 阅读全文
posted @ 2012-06-28 13:30 huangfox 阅读(1040) 评论(0) 推荐(0) 编辑

摘要: 一)二叉查找树定义二叉查找树(Binary Search Tree),或者是一棵空树,或者是具有下列性质的二叉树:若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;它的左、右子树也分别为二叉排序树。二叉排序树的查找过程和次优二叉树类似,通常采取二叉链表作为二叉排序树的存储结构。中序遍历二叉排序树可得到一个关键字的有序序列,一个无序序列可以通过构造一棵二叉排序树变成一个有序序列,构造树的过程即为对无序序列进行排序的过程。每次插入的新的结点都是二叉排序树上新的叶子结点,在进行插入操作时,不必移动其它结点,只需改动某个结点的指 阅读全文
posted @ 2012-06-28 08:46 huangfox 阅读(367) 评论(1) 推荐(0) 编辑

2012年6月27日

摘要: 一)二叉树的定义二叉树(BinaryTree)是n(n≥0)个结点的有限集,它或者是空集(n=0),或者由一个根结点及两棵互不相交的、分别称作这个根的左子树和右子树的二叉树组成。这个定义是递归的。由于左、右子树也是二叉树, 因此子树也可为空树。图 6.3 中展现了五种不同基本形态的二叉树。注意:二叉树与度数为2的有序树不同,在有序树中,虽然一个结点的孩子之间是有左右次序的,但是若该结点只有一个孩子,就无须区分其左右次序。而在二叉树中,即使是一个孩子也有左右之分。二)二叉树的性质二叉树具有以下重要性质:性质1二叉树第i层上的结点数目最多为2i-1(i≥1)。证明:用数学归纳法证明: 归纳基础:. 阅读全文
posted @ 2012-06-27 14:56 huangfox 阅读(658) 评论(0) 推荐(0) 编辑

摘要: 一)树的定义树是一种数据结构,它是由n(n>=1)个有限结点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点:每个结点有零个或多个子结点;每一个子结点只有一个父结点;没有前驱的结点为根结点;除了根结点外,每个子结点可以分为m个不相交的子树;二)数的表示树形图集合包含关系文氏图法(下图左)凹入表表示法(下图右)广义表表示法(A(B(E,F(I,J)),C,D(G,H)))三)树的基本术语(1) 结点的度(Degree)树中的一个结点拥有的子树数称为该结点的度(Degree)。一棵树的度是指该树中结点的最大度数。度为零的 阅读全文
posted @ 2012-06-27 14:34 huangfox 阅读(747) 评论(0) 推荐(0) 编辑

摘要: 一)队列的定义队列(Queue)是只允许在一端进行插入,而在另一端进行删除的线性表。允许删除的一端称为队头(Front)。允许插入的一端称为队尾(Rear)。当队列中没有元素时称为空队列。队列亦称作先进先出(First In First Out)的线性表,简称为FIFO表。二)顺序队列和链队列2.1)顺序队列顺序队列是基于顺序存储结构的,一般使用数组实现。在顺序队列中需要注意溢出的情况。"下溢"现象当队列为空时,做出队运算产生的溢出现象。“下溢”是正常现象,常用作程序控制转移的条件。"真上溢"现象当队列满时,做进栈运算产生空间溢出的现象。“真上溢”是一种 阅读全文
posted @ 2012-06-27 13:58 huangfox 阅读(731) 评论(0) 推荐(0) 编辑

摘要: 一)栈的定义堆栈(Stack)可以看成是一种“特殊的”线性表,这种线性表上的插入和删除运算限定在表的某一端进行的。通常称插入、删除的这一端为栈顶(Top),另一端称为栈底(Bottom)。当表中没有元素时称为空栈。栈为后进先出(Last In First Out)的线性表,简称为LIFO表。栈的修改是按后进先出的原则进行。每次删除(退栈)的总是当前栈中"最新"的元素,即最后插入(进栈)的元素,而最先插入的是被放在栈的底部,要到最后才能删除。二)栈的基本操作获取栈的状态(栈空、栈满、栈大小)、出栈、入栈。三)java中的栈java中的类Stack实现了栈的功能。其类结构如下图 阅读全文
posted @ 2012-06-27 11:23 huangfox 阅读(474) 评论(0) 推荐(0) 编辑

摘要: 一)线性表的定义线性表是最简单、最常用的一种数据结构。是由n(n≥0)个数据元素(结点)a1,a2,…,an组成的有限序列。对于非空的线性表:有且仅有一个开始结点a1,没有直接前趋,有且仅有一个直接后继a2;有且仅有一个终结结点an,没有直接后继,有且仅有一个直接前趋an-1;其余的内部结点ai(2≤i≤n-1)都有且仅有一个直接前趋ai-1。其余的内部结点ai(2≤i≤n-1)都有且仅有一个后继结点ai+1。二)线性表的分类(按存储结构)根据存储结构的不同,线性表分为顺序表和链表。2.1)顺序表:用把线性表的结点按逻辑次序依次存放在一组地址连续的存储单元里的方法存储的线性表简称为顺序表。顺序 阅读全文
posted @ 2012-06-27 09:38 huangfox 阅读(452) 评论(0) 推荐(0) 编辑

上一页 1 ··· 4 5 6 7 8 9 10 11 12 ··· 14 下一页