第三章 查找与排序软件基础知识课件.ppt

  1. 1、本文档共38页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第三章 查找与排序软件基础知识课件

第三章 查找与排序 1 基本的查找技术 2 基本的排序技术 3 二叉排序树及其查找 3.1基本的查找技术 顺序查找 有序表的对分查找 3.1.1顺序查找 (1)如果线性表为无序表(即表中元素的排列是无序的),则不管是顺序存储结构还是链式存储结构,都只能用顺序查找。 (2)即使是有序线性表,如果采用链式存储结构,也只能用顺序查找。 3.1.2 有序表的对分查找 设有序线性表的长度为n,被查元素为x。 将x与线性表的中间项进行比较: 若中间项的值等于x,则说明查到,查找结束; 若x小于中间项的值,则在线性表的前半部分(即中间项以前的部分) 以相同的方法进行查找; 若x大于中间项的值,则在线性表的后半部分(即中间项以后的部分) 以相同的方法进行查找。 这个过程一直进行到查找成功或子表长度为0(说明线性表中没有这 个元素)为止。 在最坏情况下,对分查找只需比较log2n次,而顺序查找需比较n次。 3.2 基本排序技术 交换排序(冒泡排序与快速排序) 插入排序(简单插入排序与希尔排序) 选择排序(简单选择排序与堆排序) 一 交换排序 冒泡排序的基本过程 冒泡排序示例 快速排序的基本过程 直接(简单)插入排序(Insert Sort) 希尔排序的基本过程 三 选择排序 简单选择排序基本过程 实验: 对于序列(15,25,7,9,11,12)先用冒泡排序对其进行排成升序序列,再查找元素7所在数组的位置。 插入元素68 插入元素71 插入元素77 插入元素88 3.4.2 二叉排序树查找 从二叉排序树的根结点开始与被查值进行比较: (1)若被查值等于根结点值,查找成功,查找过程结束。 (2)若被查值小于根结点值,则到左子树中去查找。 (3)若被查值大于根结点值,则到右子树中去查找。 在左、右子树中查找时也采用上述方法。 查找过程直到查找成功或所考虑的子树已空为止。 二叉排序树查找 输入:二叉排序树头指针BT以及存储空间;被查元素x。 输出:被查元素x在二叉排序树空间中的存储结点序号p struct btnode /*定义结点类型*/ { int d; /*数据域*/ struct btnode *lchild; /*左指针域*/ struct btnode *rchild; /*右指针域*/ }*bt; /*函数返回被查值x所在结点的存储地址*/ struct btnode bstserch(int x) { struct btnode *p; p=bt; while ((p!=NULL)(p-d!=x)) { if (x<p-d) p=p-lchild;/*沿左子树查找*/ else p=p-rchild; /*沿右子树查找*/ } return(p); } * * 线性表在顺序存储结构下的顺序查找 输入:线性表长度n以及线性表的存储空间V;被查找的元素x。 输出:被查找元素x在线性表中的序号k。如果在线性表中不存在元素x,则输出k=-1。 int serch (int v[],int n,int x) { int k; k=0; while ((k<n)(v[k]≠x)) k=k+1; if (k==n) k=-1; return(k); } 有序线性表在顺序存储结构下的对分查找 输入:有序线性表长度n以及线性表的存储空间V;被查找的元素x。 输出:被查找元素x在有序线性表中的序号k。如果在线性表中不存 在元素x,则输出k=-1。 int bserch(int v[],int n,int x) { int i,j,k; i=1; j=n; while (i<=j) { k=(i+j)/2; if (v[k-1]==x) return(k-1); if (v[k-1]>x) j=k-1; else i=k+1; } return(-1); } 排序的一些基本概念 简单地说,排序就是将一组杂乱无章的数据按一定的规律排列起来(递增或递减)。 数据表(Data List) 待排序的数据对象的有限集合。 关键字(Key) 作为排序依据的数据对象中的属性域。 主关键字 不同的数据对象若关键字互不相同,则这种关键字称为主关键字。 排序的确切定义 使一组任意排列的对象变成一组按关键字线性有序的对象。 排序的时间开销 它是衡量算法好坏的最重要的标志。通常用算法执行中的数据比较次数和数据移动次数来衡量。 基本原理:两两比较待排序的对象的关键字,如果发生逆序,则交换之,

文档评论(0)

haodoc + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档