首都师范大学基础教育研究丛书.ppt_第1页
首都师范大学基础教育研究丛书.ppt_第2页
首都师范大学基础教育研究丛书.ppt_第3页
首都师范大学基础教育研究丛书.ppt_第4页
首都师范大学基础教育研究丛书.ppt_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

查找和排序查找和排序 西安交通大学计教中心 查找基本概念 查查找表: 由同一类类数据构成的用于查查找的集合被称 作查查找表。 查查找表是具有一定存储结储结 构的数据集合,比如顺顺序 表结结构、链链式结结构、树树形结结构等。 查查找往往根据数据元素的某个属性进进行。例如根据 学号查查找某个学生记录。这这种被用于查查找的元素属 性一般称为为关键键字,它往往可以唯一标识标识 一个元素 。 静态查找表: 查找表一旦建立,在以后的查找过 程中就不会改变。它所对应的查找算法属于静态 查找技术。 动态查找表:查找表建立后,在后来的查找过程 中仍会改变查找表的内容。它所对应的查找算法 属于动态查找技术。 动态查找的例子词汇统计问题。就是统计 一篇文章中使用了多少词汇以及每个词汇的使用 次数。 解决方法是先建立一个空的查找表,以后每读 到一个词就在查找表中查询一下,如果该词汇存 在则将其使用次数加一,否则将新词插入到查找 表中并设使用次数为一次。显然,这个查找表是 不断扩张的。 平均查找长度平均查找长度: 为了确定数据元素在查找表中的位置,需要将给 定值和表中的数据元素的关键字进行比较的次数的 期望值。平均查找长度ASL的计算方法为: n 为表长; Pi 为查找第i个元素的概率。Ci为为找到该记该记 录时录时 ,曾和给给定值值比较过较过 的数据元素的个数。 在等概率条件下( Pi=1/n)这时这时 平均查查找长长度为 : 其中 : 静态查找技术 假设静态顺序查找表的存储结构为: struct SSTable ElemType *data; /存储空间地址 int length; /表的长度 ; 顺序查找表的元素存放在data0至 datalength-1中。 1顺序查找 顺序查找的方法是从表的一端开始,逐 一比较给定的数据key和表中数据元素的 关键字x的值,若两个数据一致则查找成 功,同时给出该数据元素在表中的位置 ,否则查找失败。 顺序查找算法C+语言描述如下: int SqSearch(SSTable while(kdatamid,则设low = mid+1并继续执 行步骤; 若key=datamid则查找成功,返回目标元素位 置mid+1(位置从1计数)。 若当low=high时,key!=datamid则查找失 败,返回0。 折半查找算法的C+语言描述如下: int BinSearch( SSTable low = 0; high = L.length-1; /设置查找区间初值 while (low x,则与右子树的根结点的关键字值进行 比较。 重复上述步骤,直到查找成功;或者一直比较到叶 子结点也找不到目标元素,则查找失败。 可定义二叉排序树结点如下: typedef struct BinNode ElemType x;/关键字 struct BinNode *left, *right; *BinNodePtr; 二叉排序树查找算法(静态查找)C+语言描述: BinNode *search_btree(BinNodePtr else p=p-right; return p; 进行动态查找时,查找过程还涉及到插入新 结点。其方法为: (1)在二叉排序树中查找数据key(按前一页的方 法),若查找成功则程序中止,若查找失败则转 入下面插入过程(2) (2)以数据key作为关键字建立新结点,假定查找 过程最后到达某叶子结点,比较key与此叶子结 点的关键字,若key小于后者则将新结点插入为 叶子结点的左孩子,若key大于后者则新结点插 入为叶子结点的右孩子。 动态查找过程也是生成二叉排序树的过程。假定 由整数序列10,6,19,22,8,2生成一棵二叉 排序树,可以采用逐个元素插入的方法实现。 (1) 首先将10作为根结点 (2) 然后插入6时,通过比较知6x!=key ) while(p!=NULL pre=p;/ pre/ pre为结点为结点p p的父结点指针的父结点指针 if( keyx )if( keyx )p=p-left;p=p-left; elseelse p=p-right; p=p-right; / 查找失败,插入新结点 ( 见下一页 ) (接上一页内容) if(p=NULL) / / 建立新结点建立新结点 p=new BinNode;p=new BinNode; p-left =NULL; p-left =NULL; p-right=NULL; p-right=NULL; p-x=key;p-x=key; /新结点不是根,则作为叶子插入 if(pre!=NULL) if(pre!=NULL) if(pre-x p-x) pre-left=p; if(pre-x p-x) pre-left=p; / /插入为左孩子插入为左孩子 else pre-right=p; else pre-right=p; / /插入为右孩子插入为右孩子 return p; /返回找到的结点或插入的新结点的指针 例字符统计程序 该程序可统计由用户输入的一个字符串中各种 字符的使用次数。程序算法是:首先建立空的 二叉排序树,每次读入字符后就在树表中查询 ,若找到则将该字符使用次数加一;否则,将 读入的字符插入二叉排序树。为记录字符使用 次数,在二叉树结点定义中增加了使用次数属 性。读完整个字符串后用中序遍历法读出每个 字符使用次数。 例2.5 利用二叉排序树统计字符出现次数 排序基本概念 排序是计算机内经常进行的一种操作,其目的是 将一组同类型的记录序列调整为按照元素关键 字有序的记录序列。例如将学生记录按学号排序 ,将课程记录按课程编码排序。 排序的形式化定义为:假设含n个记录的序列 为 R1, R2,,Rn ,其相应的关键字序列为 K1, K2,,Kn 。这些关键字相互之间可以进行比较 ,即在它们之间存在着这样一个关系 Kp1Kp2Kpn,按此固有关系将最初的记录序 列重新排列为 Rp1, Rp2, ,Rpn 的操作称作排 序。 排序分为内部排序和外部排序。 若整个排序过程不需要访问外存便能 完成,则称此类排序问题为内部排序; 反之,若参加排序的记录数量很大, 整个序列的排序过程不可能在内存中完 成,则称此类排序问题为外部排序。 本节只讨论内部排序的若干方法 内部排序方法有很多类型。 按方法实现特点可分为插入排序、选择 排序、交换排序、归并排序等等; 按方法效率可分为简单的排序法、先进 的排序法等等。简单的排序法包括插入 排序、选择排序、冒泡排序等,它们的 时间复杂度为O(n2)。而先进的排序法包 括快速排序、归并排序等,它们的时间 复杂度大约为O(nlog2n)。 1、直接插入排序 直接插入排序方法的基本思想是:将记录 分为有序和无序两个序列,假定当插入第k个 记录时,前面的R1,R2,Rk-1已经排好序 ,而后面的Rk,Rk+1,Rn仍然无序。这时 用Rk的关键字与Rk-1的关键字进行比较,若Rk小 于Rk-1则将Rk-1向后移动一个单元;再用Rk与 Rk-2比较,若Rk小于Rk-2则将Rk-2向后移动一个 单元,依次比较下去,直到找到插入位置即将 Rk插入。初始状态可以认为有序序列为R1。 初始状态:初始状态: 35 352222161619192222 第第1 1趟趟 : 22 223535161619192222 第第2 2趟趟 : 16 162222353519192222 第第3 3趟趟 : 16 161919222235352222 第第4 4趟趟 : 16 161919222222223535 直接插入排序执行过程 显示在序列35,22,16,19,22上应用插入排序 的过程,为了对序列中相同记录加以区别,使用了 下划线。 直接插入排序算法C+语言描述: void InsertSort( int v , int n ) int i, j, temp; for( i=1; i0 vj=vj+1; vj+1=temp; / /第第i i大的元素筛选结束大的元素筛选结束 4、快速排序 快速排序的基本思想是:任取待排序序列中某个 记录S(例如取第一个记录)作为基准,经过一系 列比较和交换,将整个序列划分为如下形式: 左侧子序列 S 右侧子序列 并且满足以下两点: 左侧子序列中所有记录的关键字都小于或 等于基准对象S的关键字; 右侧子序列中所有记录的关键字都大于或 等于基准对象S的关键字 然后分别对左右两个子序列重复施行上述方法 ,直到排序完成。 在在22, 35, 27, 16, 45, 19, 22, 35, 27, 16, 45, 19, 22 22 上应用划分算法(即一趟快速排序)上应用划分算法(即一趟快速排序) 下列快速排序中划分序列的算法对vlow与vhigh之间的元素 进行划分,利用了序列第一个记录作为基准,最终将low与 high区间中的序列划分为左右两个子序列,将基准对象放到适 当位置并返回其位置的下标。 int Partition( int low, int high ) int pivot = vlow; /基准对象pivot位置为low while(lowpivot) high-; /右边界下移 vlow=vhigh; /小于pivot的放到左侧 while(lowBF1J5N9QcUgYk$o(r+vz;DG2K6OaSeWhZl%p)twA:E0I4M8QbTfXj!n*q-uy.C G1J5N9RdVhYk$o(s=wz;DH3L7OaSeWi#m%p)txBE0I4M8QcUfXj!n*r+uy.C G2K5N9RdVhZk$o(s=wBF1I4M8QcUgXj!n*r+vy.C G2K6O9RdVhZl%o(s=wBF1J5M8QcUgYk!n*r+vz;C G2K6OaRdVhZl%p)s=wBF1J5N8QcUgYk$o*r+vz;DG2K6OaSeVhZl%p)twA:E0I4M8PbTfXj!n*q-uy.C F1J5N9RdVgYk$o(s=wz;DH3L6OaSeWi#m%p)txB:E0I4M8QcTfXj!n*r+uy.C G2J5N9RdVhZk$o(s=wBF0I4M8QcUgXj!n*r+vy.C G2K6N9RdVhZl%o(s=wBF1J4M8QcUgYk!n*r+vz.C G2K6OaRdVhZl%p(s=wBF1J5N8QcUgYk$n*r+vz;D G2K6OaSeVhZl%p)t=wB:E0I4M8QbTfXj!n*r-uy.C G2J5N9RdVhYk$o(s=wBF0I4M8QcUfXj!n*r+vy.C G2K5N9RdVhZl$o(s=wBF1I4M8QcUgYj!n*r+vz.C G2K6O9RdVhZl%p(s=wBF1J5M8QcUgYk$n*r+vz;C G2K6OaSdVhZl%p)t=wBF1J5N9QcUgYk$o(r+vz;DG2K6OaSeWhZl%p)twBF1J5N9QcUgYk$o(r+vz;DG2K6OaSeWhZl%p)twA:E0I4M8QbTfXj!n*q-uy.C G1J5N9RdVhYk$o(s=wz;DH3L7OaSeWi#m%p)txBE0I4M8QcUfXj!n*r+uy.C G2K5N9RdVhZk$o(s=wBF1I4M8QcUgXj!n*r+vy.C G2K6O9RdVhZl%o(s=wBF1J5M8QcUgYk!n*r+vz;C G2K6OaRdVhZl%p)s=wBF1J5N8QcUgYk$o*r+vz;DG2K6OaSeVhZl%p)twA:E0I4M8PbTfXj!n*q-uy.C F1J5N9RdVgYk$o(s=wz;DH3L6OaSeWi#m%p)txB:5N9RcUgYk$o(s+vz;DH2K6OaSeWiZl%p)txB:E0I4M8QcTfXj!n*r-uy.C G2J5N9RdVhZk$o(s=wBF0I4M8QcUgXj!n*r+vy.C G2K6N9RdVhZl$o(s=wBF1J4M8QcUgYj!n*r+vz.C G2K6OaRdVhZl%p(s=wBF1J5N8QcUgYk$n*r+vz;D G2K6OaSdVhZl%p)t=wB:E0I4M8QbTfXj!n*r-uy.C G1J5N9RdVhYk$o(s=wBE0I4M8QcUfXj!n*r+vy.C G2K5N9RdVhZl$o(s=wBF1I4M8QcUgYj!n*r+vy.C G2K6O9RdVhZl%p(s=wBF1J5M8QcUgYk$n*wBF1I4M8QcUgYj!n*r+vy.C G2K6O9RdVhZl%p(s=wBF1J5M8QcUgYk$n*r+vz;C G2K6OaSdVhZl%p)s=wBF1J5N9QcUgYk$o*r+vz;DG2K6OaSeWhZl%p)twA:E0I4M8QbTfXj!n*q-uy.C G1J5N9RdVgYk$o(s=wz;DH3L7OaSeWi#m%p)txBE0I4M8QcTfXj!n*r+uy.C G2K5N9RdVhZk$o(s=wBF1I4M8QcUgXj!n*r+vy.C G2K6N9RdVhZl%o(s=wBF1J4M8QcUgYk!n*r+;DH3L7PaSeWi#mD G2K6OaSeVhZl%p)t=wB:E0I4M8QcTfXj!n*r-uy.C G2J5N9RdVhYk$o(s=wBF0I4M8QcUfXj!n*r+vy.C G2K6N9RdVhZl$o(s=wBF1J4M8QcUgYj!n*r+vz.C G2K6O9RdVhZl%p(s=wBF1J5M8QcUgYk$n*r+vz;D G2K6OaSdVhZl%p)t=wBF1J5M8QcUgYk$n*r+vz;C G2K6OaSdVhZl%p)t=wBF

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论