《计算机2级公共基础知识数据结构ppt课件.ppt》由会员分享,可在线阅读,更多相关《计算机2级公共基础知识数据结构ppt课件.ppt(85页珍藏版)》请在三一办公上搜索。
1、计算机等级考试公共基础知识,第2页,计算机二级考试公共基础知识大纲,数据结构与算法 程序设计基础 软件工程基础 数据库设计基础,这四个方面在试卷中出现的情况是:选择题10个(20分),填空题5个(10分),总分值占到了试卷卷面分的30,是一个不小的比例。,第3页,计算机二级考试公共基础知识试卷分析,第4页,算法 算法的基本概念 2.算法复杂度的概念和意义,一、基本数据结构与算法,数据结构 数据结构的概念 线性表 栈和队列 树与二叉树 查找技术 排序技术,对于等级考试,这个部分的考核重点主要在算法和数据结构的基本概念、二叉树(遍历、结点),还有排序和查找考试中也经常会涉及到。,第5页,算法的定义
2、对解题方案准确而完整的描述称为算法。,算法是程序设计的核心, 算法的基本概念,算法是在有限步骤内求解某一问题所使用的一组定义明确的规则。通俗点说,就是计算机解题的过程(计算的方法)。在这个过程中,无论是形成解题思路(推理实现的算法)还是编写程序(操作实现的算法),都是在实施某种算法。,例: n个数从大到小进行排序。 有多种排序方法 ,常用的有冒泡排序、选择排序等。,第6页,2 . 算法的基本特征一个算法应该具有以下五个重要的特征:,有穷性 确定性 输入 输出 可行性,第7页,算法与计算机程序 算法_是一组逻辑步骤 程序用计算机语言描述的算法,3. 算法的表示,INPUT rS=3.14 * r
3、*rPRINT S,问题:输入园的半径,计算园的面积,一个算法的表示需要使用一些语言形式。传统的算法-图形法,如“流程图”和N-S图目前常用的方法-使用伪码描述算法。,第8页,4. 算法的两个基本要素:,基本运算和操作 算术运算 关系运算 逻辑运算 数据传输,控制结构 顺序 选择 循环,一是对数据对象的运算和操作;二是算法的控制结构。,算法基本设计方法:列举法、归纳法、递推、递归、减半递推技术、回溯法,第9页,冒泡排序的方法:1.扫描整个线性表,逐次对相邻的两个元素进行比较,若为逆序,则交换;第一趟扫描的结果使最大的元素排到表的最后 ;2.除最后一个元素,对剩余的元素重复上述过程,将次大的数排
4、到表的倒数第二个位置;3.重复上述过程;对于长度为n的线性表,冒泡排序需要对表扫描n-1遍。,算法举例:n个数排序,第10页,5. 算法评价 评价一个算法优劣的主要标准是算法的执行效率和存储需求: 时间复杂度:执行这个算法所需要的计算工作量一般可以用算法在执行过程中所需基本运算的执行次数来度量计算工作量 空间复杂度:执行这个算法所需要的内存空间 算法在执行过程中临时占用的存储空间 时间复杂度它大致等于计算机执行一种简单操作所需的平均时间与算法中进行简单操作的次数的乘积。 一个算法在计算机存储器上所占用的存储空间,包括存储算法本身所占用的存储空间、算法中的输入输出数据所占用的存储空间和算法在运行
5、过程中临时占用的存储空间这三个部分,第11页,一、算法,对解题方案准确而完整的描述称为算法。 算法不等于程序,程序的编制不可能优于算法的设计。算法评价: 时间复杂度:执行这个算法所需要的计算工作量 空间复杂度:执行这个算法所需要的内存空间,第12页,(1) 在计算机中,算法是指_。 A. 查询方法 B. 加工方法 C. 解题方案的准确而完整的描述 D. 排序方法(2)下列叙述中正确的是 (07年4月)A)算法的效率只与问题的规模有关,而与数据的存储结构无关B)算法的时间复杂度是指执行算法所需要的计算工作量C)数据的逻辑结构与存储结构是一一对应的D)算法的时间复杂度与空间复杂度一定相关(3)算法
6、的有穷性是指 (08年4月)A)算法程序的运行时间是有限的 B)算法程序所处理的数据量是有限的 C)算法程序的长度是有限的 D)算法只能被有限的用户使用,(c),(B),算法习题:,(A),第13页,(4) 算法的时问复杂度是指 (2010年3月)A)算法的执行时间B)算法所处理的数据量C)算法程序中的语句或指令条数D)算法在执行过程中所需要的基本运算次数(5) 算法的空间复杂度是指 (09年9月) A)算法在执行过程中所需要的计算机存储空间B)算法所处理的数据量C)算法程序中的语句或指令条数D)算法在执行过程中所需要的临时工作单元数(6) 下列叙述中正确的是 (06年9月)A)一个算法的空间
7、复杂度大,则其时间复杂度也必定大B)一个算法的空间复杂度大,则其时间复杂度必定小C)一个算法的时间复杂度大,则其空间复杂度必定小 D)上述三种说法都不对,(D)计算工作量,(A),(D),第14页,计算机在进行数据处理时,实际需要处理的数据元素一般有很多,而这些大量的数据元素都需要存放在计算机中,因此,大量的数据元素在计算机中如何组织,以便提高数据处理的效率,并且节省计算机的存储空间,这是进行数据处理的关键问题。,二、数据结构,程序=算法+数据结构,数据结构是指相互有关联的数据元素的集合。 一般来说,人们不会同时处理特征完全不同且互相之间没有任何关系的各类数据元素,对于具有不同特征的数据元素总
8、是分别进行处理。一般情况下,在具有相同特征的数据元素集合中,各个数据元素之间存在有某种关系(即联系),这种关系反映了该集合中的数据元素所固有的一种结构。,第15页,二. 数据结构,数据结构是指相互有关联的数据元素的集合。数据结构是研究数据和数据之间关系的一门学科,它包括三个方面。(1)数据集合中各数据元素之间所固有的逻辑关系,即数据的逻辑结构;(2)在对数据进行处理时,各数据元素在计算机中的存储关系,即数据的存储结构;(3)对各种数据结构进行的运算。,第16页,1. 逻辑结构 数据的逻辑结构是指反映数据元素之间逻辑关系的数据结构。数据的逻辑结构包含:(1)表示数据元素的信息;(2)表示各数据元
9、素之间的前后件关系。例:1. 一年四季的数据结构 B=(D,R) D=春,夏,秋,冬 R=(春,夏) ,(夏,秋),(秋,冬)2. 家庭成员的数据结构 B=(D,R) D=父亲,儿子,女儿 R=(父亲,儿子) ,(父亲,女儿),春,夏,秋,冬,数据结构的图形表示,父亲,儿子,女儿,第17页,常见的逻辑结构有:线性结构、树形结构和图形结构。, 线性结构 结构中的每个元素之间存在一个对一个的关系; 树形结构 结构中的每个元素之间存在一个对多个的关系; 图形结构或网状结构 结构中的每个元素之间存在多个对多个的关系。其中,树形结构和图形结构统称为非线性结构。数据的逻辑结构可以用二元关系表示,也可以直观
10、地用图形来表示。,第18页,2. 存储结构(物理结构) 计算机在实际进行数据处理时,被处理的各数据元素总是被存放在计算机的存储空间中,并且,各数据元素在计算机存储空间中的位置与它们的逻辑关系不一定是相同的,而且一般也不可能相同。如:一年四季 家庭成员 计算机存储空间怎样存放? 存储结构指数据结构在计算机存储空间中的具体实现。常见的存储结构有: 顺序存储结构 链式存储结构索引存储结构,只抽象地反映数据元素之间的关系的结构,而不管其存储方式的数据结构称为逻辑结构。一种数据结构可以根据需要表示成一种或多种存储结构。,第19页,3. 数据的运算 检索 插入 删除 更新 排序,通常,一个数据结构中的元素
11、结点可能是动态变化的。根据需要或在处理过程中,可以在一个数据结构中增加一个新结点(插入运算),也可以删除某个结点(删除运算),除此之外,对数据结构的运算还有查找、分类、合并、分解、复制和修改。 在对数据结构的处理过程中,不仅数据结构中结点的个数在动态变化,而且,各数据元素之间的关系也有可能在动态地变化。如:无序表变有序表,数据结构是研究数据和数据之间关系的一门学科,研究以下三方面内容: 数据的逻辑结构 数据的存储结构 数据的运算,第20|92页,常见的数据结构,1.线性表 2.栈和队列 3.树,第21页, 线性表(Linear List),线性表是由n(n0)个数据元素 a1,a2,ai,an
12、组成的一个有限序列。,简单的线性表,复杂的线性表,记录1 02011001 张三 男,记录2 02011003 李四 女 ,记录3,记录4,第22页,线性表的顺序存储结构,顺序存储结构把逻辑上相邻的数据元素存储在物理上相邻的存储单元里,顺序存储结构只存储结点的值,不存储结点间的关系,结点间的关系由存储单元的邻接关系来体现。,存储地址,2000,2004,2000+4*(i-1),2000+4*(n-1),占4个字节,Loa(ai)=Loa(a1)+L*(i-1),第i个数的地址,第一个数的地址,L为该类型数所占的字节,线性表的存储结构,线性表的存储结构有两种: 顺序存储结构 链式存储结构,第2
13、3页,顺序表的插入和删除运算,在线性表顺序存储情况下,要插入或删除一个元素,都会由于数据元素的移动而消耗大量的处理时间,所以这种存储方式对于小线性表或其中数据元素不经常变动的线性表是合适的。,线性表的顺序存储结构称为顺序表。,第24页,顺序表的插入运算 在第 i 个数据元素之前插入一个新的元素,思想:,1. 将第 n 到 i 个元素均向后移动一个位置。,2. 将新元素放置在第 i 个位置。,例,在第 i 个元素前插入 b,b,第25页,例,在第4个元素之前插入元素25。,25,第26页,顺序表的删除运算 删除第 i 个数据元素,思想:,1. 删除第 i 个数据元素。,2. 将第 i+1 到 n
14、 个元素均向前移动一个位置。,第27页,例,删除第4个元素25。,第28页,线性表的链式存储结构,线性表的链式存储结构称为线性链表。 链式存储结构不要求逻辑上相邻的数据元素物理位置也相邻,而且各数据元素的存储顺序也是任意的。各数据元素的先后关系是由各结点的指针域指示。 链式存储结构的每一个存储结点不仅存储结点的值,而且存储结点之间的关系:,第29页,应用举例线性链表的存储结构,设线性表为(a1,a2,a3,a4,a5),HEAD,3,线性链表的物理状态,线性表的顺序存储结构,注意:1 2 3 此类编号不代表所在的地址单元的地址编码,第30页,线性链表的插入和删除运算,采用链式存储结构,存储空间
15、开销较大,但是进行插入和删除运算不会造成大量元素的移动。,第31页,在a,b之间插入元素x :,s-next = p-next,p-next = s,第32页,删除元素b :,3)free (q) ;,第33页,循环链表是另一种形式的链式存储结构。它的特点是表中最后一个结点的指针域指向头结点。,第34页,双向链表的存储结构,提问:单向链表的缺点是什么? 提示:如何寻找结点的直接前趋。 双向链表可以克服单链表的单向性的缺点。 在双向链表的结点中有两个指针域,其一指向直接后继,另一指向直接前趋。,HEAD,3,1,5,10,双向循环链表,第35页,线性表的存储结构有两种,顺序存储结构,注意: 数据
16、元素在计算机存储空间中的位置关系与它们的逻辑关系不一定是相同的。 一个逻辑数据结构可以有多种存储结构,且不同的存储结构影响数据处理的效率 。,HEAD,3,链式存储结构,线性表 : a1,a2,a3,a4,a5 ,第36页,2. 栈和队列,栈和队列都是特殊的线性表。 栈(Stack)及其基本运算 队列(Queue)及其基本运算 循环队列及其基本运算,第37页,栈(Stack)是一种特殊的线性表。其特点是插入和删除运算都只能在线性表的一端进行。 栈是按照“先进后出”或“后进先出”的原则组织数据的线性表。 栈的物理存储结构可以用顺序结构,也可以用链表结构。 下面讨论顺序存储结构中栈元素的插入和删除
17、运算。栈的基本运算有三种:入栈、退栈和读栈顶元素,在顺序栈中插入和删除运算不需要移动表中其他数据元素。,第38页,入栈操作,top,空栈: top = -1MaxTop = = 3,3,1,2,0,第39页,出栈操作,0 1 2 maxSize-1,top,b,a,c,第40页,队列(Queue)是一种特殊的线性表。其特点是所有的插入都在表的一端进行,所有的删除运算都在表的另一端进行。 队列是按照“先进先出”或“后进后出”的原则组织数据的线性表。 队列的物理存储结构可以用顺序结构,也可以用链式结构。,第41页,队列的基本操作(顺序存储结构),用一组地址连续的存储单元依次存放从队头到队尾的元素。
18、,J1,J2,J3,设两个指针front,rear,约定:rear指示队尾元素;front指示队头元素前一位置初值front=rear=-1,空队列条件:front=rear入队列:sq+rear=x;出队列:x=sq+front;,存在问题(设数组大小为M),则:当front=-1,rear=M-1时,再有元素入队发生溢出真溢出。当front-1,rear=M-1时,再有元素入队发生溢出假溢出。,第42页,栈有三种操作: 入栈出栈读栈顶元素队列有三种操作:入队出队读队首元素,例:有入栈元素序列:ABCD,求可能的出栈序列如是队列又是什么情况呢?,第43页,队列溢出解决方案,队首固定,每次出队
19、剩余元素向下移动浪费时间。循环队列 把队列的存储空间在逻辑上看作一个环,当R指向存储空间的末端后,就把它重新置于始端。基本思想:把队列设想成环形,让sq0接在sqM-1之后,若rear+1=M,则令rear=0;入队: rear=(rear+1)%M; sqrear=x;出队: front=(front+1)%M; x=sqfront;,第44页,解决方案:1.另外设一个标志以区别队空、队满2.少用一个元素空间: 队空:front=rear 队满:(rear+1)%M=front,队空:front=rear,队满:front=rear,第45页,循环队列,队列空:front=rear;,B,C
20、,D,队列满:(rear+1)%MaxSize=front,第46页,循环队列,B,C,D,队列满:,出队:front=(front+1)%MaxSize,进队:rear=(rear+1)%MaxSize,第47页,循环队列中结点的个数,循环队列队中结点的个数: ( rear - front + maxSize ) % maxSize,第48页,队列中进行插入的一端称做队尾(rear),进行删除的一端称做队首(front)。,习题:数据结构分为逻辑结构和存储结构,循环队列属于【 】结构。(2005年9月),答案:存储结构。,第49页,常见数据结构的逻辑结构,线性表 线性结构栈 是特殊的线性表
21、队列 也是一种操作受限的特殊的线性表树 (树型结构) 是一种重要的非线形数据结构,第50页,数据存储结构方面的考题,1:数据的存储结构是指 (2005年4月)A) 存储在外存中的数据 B) 数据所占的存储空间量C) 数据在计算机中的顺序存储方式 D) 数据的逻辑结构在计算机中的表示2. 下列叙述中正确的是 (2009年3月) A)栈是“先进先出”的线性表 B)队列是“先进后出”的线性表 C)循环队列是非线性结构 D)有序线性表既可以采用顺序存储结构,也可以采用链式存储结构 3. 数据结构分为线性结构和非线性结构,带链的队列属于 。4. 下列数据结构中,属于非线性结构的是A)循环队列 B) 带链
22、队列C) 二叉树 D)带链栈,答案:D。,答案:D。,答案:线性结构。,答案:c,第51页,5。下列叙述中正确的是( )。 (2008年9月) A)顺序存储结构的存储一定是连续的,链式存储结构的存储空间不一定是连续的 B)顺序存储结构只针对线性结构,链式存储结构只针对非线性结构 C)顺序存储结构能存储有序表,链式存储结构不能存储有序表 D)链式存储结构比顺序存储结构节省存储空间,答案:A。,6。下列关于栈的叙述正确的是 (2008年4月) A)栈按“先进先出”组织数据 B)栈按“先进后出”组织数据 C)只能在栈底插入数据 D)不能删除数据,答案:B。,7. 一个队列的初始状态为空。现将元素A,
23、B,C,D,E,F,5,4,3,2,1依次入队,然后再依次退队,则元素退队的顺序为 【1】 。(2010年3月),答案:A,B,C,D,E,F,5,4,3,2,1,第52页,9. 设某循环队列的容量为50,如果头指针front=45(指向队头元素的前一位置),尾指针rear=10(指向队尾元素),则该循环队列中共有 【2】 个元素。 (2010年3月),8。假设用一个长度为50的数组(数组元索的下标从0到49)作为栈的存储空间,栈底指针bottom指向栈底元素,栈顶指针top指向栈顶元素,如果bottom=49,top=30(数组下标),则栈中具有【 】个元素。 (2009年3月),答案:20
24、,答案:15 ( rear - front + maxSize ) % maxSize,第53页,一个非空的数据结构若满足下面的两个条件,则这种数据结构即为线性结构。 有且仅有一个根结点; 除第一个结点外,每一个结点最多有一个直接前驱结点; 除最后一个结点外,每一个结点最多有一个直接后继结点。,线性结构与非线性结构线性表、栈和队列都是线性结构 一个数据结构不是线性结构,则称其为非线性结构。,第54页,树型结构是一种重要的非线性结构。 树的概念 二叉树的概念 二叉树的存储 二叉树的遍历,3. 树与二叉树,第55页,树的概念,树的定义:n个结点的有限集。(n=0),A,B,D,F,E,C,G,H,
25、I,J,K,M,根:only one 若n=0,则称为空树; 否则,当n1时,其余结点被分成m(m0)个互不相交的子集T1,T2,.,Tm,每个子集又是一棵树。由此可以看出,树的定义是递归的。 Question:如何辨别根?,A,只有一个结点的树,第56页,树型结构的常用术语,A,B,D,F,E,C,G,H,I,J,K,M,结点的度 一个结点的子树的个数; Q:结点A、G的度数? 树的度 树中所有结点度的最大值;Q:右图中树的度? 终端结点 度为0的结点; Q:图中叶子结点有几个?7 非终端结点 度不为0的结点; Q:图中非终端结点有几个? 5,孩子结点、双亲结点、兄弟结点、结点的子孙、结点的
26、祖先,第57页,树型结构的常用术语,A,B,D,F,E,C,G,H,I,J,K,M,结点的层次 树中根结点的层次为1,根结点子树的根为第2层,以此类推; Q:图中结点F的层次? 树的深度 树中所有结点层次的最大值; Q:图中树的深度? 有序树、无序树 如果树中每棵子树从左向右的排列拥有一定的顺序,不得互换,则称为有序树,否则称为无序树。,第58页,二叉树的概念,定义:二叉树是一种有序的树形结构。它与一般树形结构的区别是: 每个结点最多有两棵子树; 子树有左右之分,次序不能任意颠倒。,二叉树的5种基本形态,第59页,二叉树的性质,【性质1】 在二叉树的第i层上最多有2i-1个结点(i1),第60
27、页,【性质2】深度为h的二叉树最多有2h -1个结点(h 1)满二叉树:如果一个深度为h的二叉树拥有2h-1个结点,则将它称为满二叉树。完全二叉树:有一棵深度为h,具有n个结点的二叉树,若将它与一棵同深度的满二叉树中的所有结点按从上到下,从左到右的顺序分别进行编号,且该二叉树中的每个结点分别与满二叉树中编号为1n的结点位置一一对应,则称这棵二叉树为完全二叉树。,第61页,满二叉树,完全二叉树,12,13,8,9,10,11,4,5,6,7,1,2,3,完全二叉树是满二叉树 满二叉树也是完全二叉树,第62页,12,13,8,9,10,11,4,5,6,1,2,3,非完全二叉树,深度为4的完全二叉
28、树,8,4,5,6,7,1,2,3,第63页,【性质3】二叉树上叶子结点数比度为2的结点数多1,度为2的结点,叶子结点,第64页,【性质4】具有n个结点的完全二叉树的深度为 log2 (n+1) 其中,log2n 的结果是不大于log2n的最大整数,深度为4的满二叉树,深度为4的完全二叉树,深度为3的完全二叉树具有47深度为4的完全二叉树具有815深度为5的完全二叉树具有1531,log2(8+1) = ln9/In2=4log2 (15+ 1) =In16/In2=4,深度为6的完全二叉树 具有3263深度为7的完全二叉树 具有64127深度为8的完全二叉树 具有128255深度为9的完全二
29、叉树 具有256511深度为10的完全二叉树具有5121023深度为11的完全二叉树具有10242047,第65页,1:在深度为7的满二叉树中,叶子结点的个数为(2006年4月) A)32 B)31 C)64 D)632:在深度为7的满二叉树中,度为2的结点个数为【 】 。(07年4月)3:一棵二叉树中共有70个叶子结点与80个度为1的结点,则该二叉树中的总结点数为 (07年9月) A)219 B)221 C)229 D)2314: 某二叉树中度为2的结点有18个,则该二叉树中有 【 】个叶子结点。(2005年4月)5:一棵二叉树第六层(根结点为第一层)的结点数最多为【 】个。(2005年9月
30、),树型结构方面的考题,1答案:C。二叉树第i层最多有2i-1个结点(h 1),3答案:A。,5答案:32。,2答案:63。二叉树上叶子结点数比度为2的结点数多1,4答案:19。,第66页,二叉树的存储,在计算机中,二叉树通常采用链式存储结构。,二叉树的存储结点的结构,A,B,D,C,F,G,E,t,第67页,二叉树的遍历,遍历指不重复地访问二叉树中的所有结点。 二叉树的遍历的次序与树型结构上的大多数运算有联系。遍历的方式有三种(1)先(前)序遍历(DLR)(2)中序遍历(LDR)(3)后序遍历(LRD),第68页,二叉树的遍历,遍历指不重复地访问二叉树中的所有结点。(1)先(前)序遍历(DL
31、R) 若二叉树为空,则结束遍历操作;否则访问根结点;先序遍历左子树;先序遍历右子树。,先序遍历的结果: A B E C F G H D,第69页,(2)中序遍历(LDR) 若二叉树为空,则结束遍历操作;否则中序遍历左子树;访问根结点;中序遍历右子树。中序遍历的结果: E B A F H G C D(3)后序遍历(LRD) 若二叉树为空,则结束遍历操作;否则后序遍历左子树;后序遍历右子树;访问根结点。后序遍历的结果: E B H G F D C A,第70页,先序序列:ABDGCEFH中序序列:DGBAECHF后序序列:GDBEHFCA,A,B,C,F,H,D,E,G,下图所示的二叉树经过三种遍
32、历得到的顺序分别为?,练习:,根据先序遍历序列,建立二叉树,第71页,1:设二叉树如下: (2010年3月)对该二叉树进行后序遍历的结果为 【3】,树型结构方面的考题 2,2: 对如下二叉树(2006年4月)进行后序遍历的结果为A) ABCDEFB) DBEAFC C) ABDECFD) DEBFCA,EDBGHFCA,D,A,B,C,F,H,D,G,E,第72页, 查找技术,查找是数据处理的重要内容。 查找指在一个给定的数据结构中查找指定的元素,该元素也称关键字。 若找到了满足条件的结点,称查找成功;否则称查找失败。 衡量一个查找算法的主要标准是查找过程中对关键字进行的平均比较次数。 通常根
33、据不同的数据结构,采用不同的查找方法: 顺序查找 二分查找,第73页,顺序查找,线性表中最简单的查找方法。 方法:从线性表的第一个元素开始,依次将线性表中的元素与关键字进行比较,若相等,则查找成功;若将所有元素都与关键字进行了比较但不相等,则查找失败。 顺序查找法的适用场合: 对线性表中元素的排列次序没有要求; 对线性表的存储结构没有要求,链式结构和顺序结构均可。,第74页,二分查找(折半查找),是一种效率较高的查找方法,但是只适合顺序存储的有序表。二分查找的方法:首先将关键字与线性表中间位置的结点比较,相等则查找成功;不相等则根据比较结果确定下一步查找应在哪个子表中进行;重复上述过程,直至查
34、找成功或子表长度为0。 二分查找法的适用场合: 线性表中的元素按关键字值递增或递减的次序排列; 线性表采用顺序存储结构。,第75|92页,折半查找算法举例,对给定数列(有序) 3,5,11,17,21,23,28,30,32,50,按折半查找算法,查找关键字值为30的数据元素。 a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 第1次: 3,5,11,17,21,23,28,30,32,50 K=30 mid1=(1+10)/2 = 5 ka(mid1)=a(5)=21 第2次: 23,28,30,32,50 mid2 = (6+10) /2 = 8 K=a(mid2)=a(8)=
35、30,low,high,mid,low,high,mid,第76页,练习假设待查有序(升序)顺序表中数据元素的关键字序列为(8,18,27,42,47,50,56, 68,95,120),用折半查找方法查找关键字值为27的数据元素.,对于长度为n的有序线性表,最坏情况只需比较log2n次。,第77页, 排序技术,排序指将一个无序序列整理成按关键字值递增或递减排列的有序序列。 排序方法中其排序对象一般是顺序存储的线性表。 根据排序序列的规模以及数据处理的要求,可以采用不同的排序方法:交换类排序法 冒泡排序快速排序 插入类排序法简单插入排序希尔排序选择类排序法简单选择排序堆排序,第78页,冒泡排序
36、,冒泡排序的方法:扫描整个线性表,逐次对相邻的两个元素进行比较,若为逆序,则交换;第一趟扫描的结果使最大(或最小)的元素排到表的最后(或最前) ;除最后(或最前)一个元素,对剩余的元素重复上述过程,将次大(或次小)的数排到表的倒数(或正数)第二个位置;重复上述过程;对于长度为n的线性表,冒泡排序需要对表扫描n-1遍。,第79|92页,冒泡排序的方法,设待排数据元素的关键字为(18,20,15,32,4,25),第一趟冒泡排序后的序列状态如图所示:18 20 15 32 4 25 18 20 15 32 4 25 18 15 20 32 4 25 18 15 20 32 4 25 18 15 2
37、0 4 32 25 18 15 20 4 25 32 最大数,第二趟冒泡排序,第80|92页,Q:第二趟冒泡排序后的结果是什么样的?达到了最终的排序目标吗?一共需要多少次能够最后成为有序序列?Q:你觉得冒泡排序的效率如何?如果是你,你会用什么方法来排序? 冒泡排序比较简单,当初始序列基本有序时,冒泡排序有较高的效率,反之效率较低。冒泡排序终止条件: 本趟排序未发生交换,终止排序算法,第81|92页,初始 第一趟 第二趟 第三趟 第四趟 第五趟序列 排序后 排序后 排序后 排序后 排序后26 18 18 18 18 918 26 26 26 9 1532 32 32 9 15 1854 47 9
38、 15 2647 9 15 329 15 4715 54,设待排数据元素的关键字为(26,18,32,54,47,9,15 ),冒泡排序法,需要比较的次数为n(n-1)/2;,第82页,选择排序,选择排序的方法:扫描整个线性表,从中找出最小的元素,与第一个元素交换;除第一个元素,对剩下的子表采用相同的方法找出次小的数,与第二个数交换;重复上述过程;对于长度为n的线性表,选择排序需要对表扫描n-1遍。,简单选择排序法,最坏情况需要n(n-1)/2次比较;,第83|92页,初态: 15,14,22,30,37,15,11第一趟: 11 14,22,30,37,15,15第二趟: 11,14 22,
39、30,37,15,15第三趟: 11,14,15 30,37,22,15第四趟: 11,14,15,15 37,22,30第五趟: 11,14,15,15,22 37,30第六趟: 11,14,15,15,22,30 37 有序序列,例:设待排数据元素的关键字为(15,14,22,30,37,11),每一趟排序后的序列状态如图所示:,第84页,排序法小结:,简单选择排序法,最坏情况需要n(n-1)/2次比较;冒泡排序法, 最坏情况需要n(n-1)/2次比较;希尔排序法, 最坏情况需要O(n1.5)次比较;堆排序法, 最坏情况需要O(nlog2n)次比较;,第85页,排序查找方面的考题:,(1)
40、 对于长度为n的线性表,在最坏情况下,下列各排序法所对应的比较次数中正确的是(2005年4月)A) 冒泡排序为n/2 B) 冒泡排序为nC) 快速排序为n D) 快速排序为n(n-1)/2(2)在长为64的有序线性表中进行顺序查找,最坏情况下需要比较的次数为_。(06年9月) A)、63 B)、64 C)、6 D)、7(3) 下列数据结构中,能用二分法进行查找的是(2005年9月) A)顺序存储的有序线性表 B)线性链表 C)二叉链表 D)有序线性链表(4) 下列排序方法中,最坏情况下比较次数最少的是(09年3月) A)冒泡排序 B)简单选择排序 C)直接插入排序 D)堆排序,D,B,A,D,