第8章 排序

合集下载

(完整word版)数据结构 第八章排序

(完整word版)数据结构 第八章排序

第八章排序:习题习题一、选择题1.在所有排序方法中,关键字比较的次数与记录的初始排列次序无关的是( )。

A.希尔排序B.冒泡排序C.插入排序D.选择排序2.设有1000个无序的记录,希望用最快的速度挑选出其中前10个最大的记录,最好选用( )排序法。

A.冒泡排序B.快速排序C.堆排序D.基数排序3.在待排序的记录序列基本有序的前提下,效率最高的排序方法是( )。

A.插入排序B.选择排序C.快速排序D.归并排序’4.不稳定的排序方法是指在排序中,关键字值相等的不同记录的前后相对位置( )。

A.保持不变B.保持相反C.不定D.无关5.内部排序是指在排序的整个过程中,全部数据都在计算机的( )中完成的排序。

A. 内存储器B.外存储器C.内存储器和外存储器D.寄存器6.用冒泡排序的方法对n个数据进行排序,第一趟共比较( )对记录。

A.1B.2C.n-lD.n7.直接插入排序的方法是从第( )个记录开始,插入前边适当位置的排序方法。

A.1B.2C.3D.n8.用堆排序的方法对n个数据进行排序,首先将n个记录分成( )组。

A.1B.2C.n-lD.n9.归并排序的方法对n个数据进行排序,首先将n个记录分成( )组,两两归并。

A.1B.2C.n-lD.n10.直接插入排序的方法要求被排序的数据( )存储。

A.必须是顺序B.必须是链表C.顺序或链表D.二叉树11.冒泡排序的方法要求被排序的数据( )存储。

A.必须是顺序B.必须是链表C.顺序或链表D.二叉树12.快速排序的方法要求被排序的数据( )存储。

A.必须是顺序B.必须是链表C.顺序或链表D.二叉树13.排序方法中,从未排序序列中依次取出记录与已排序序列(初始时为空)中的记录进行比较,将其放入已排序序列的正确位置上的方法,称为( )。

A.希尔排序B.冒泡排序C.插入排序D.选择排序14.每次把待排序的记录划分为左、右两个子序列,其中左序列中记录的关键字均小于等于基准记录的关键字,右序列中记录的关键字均大于基准记录的关键字,则此排序方法叫做( )。

《数据结构(C语言版 第2版)》(严蔚敏 著)第八章练习题答案

《数据结构(C语言版 第2版)》(严蔚敏 著)第八章练习题答案

《数据结构(C语言版第2版)》(严蔚敏著)第八章练习题答案第8章排序1.选择题(1)从未排序序列中依次取出元素与已排序序列中的元素进行比较,将其放入已排序序列的正确位置上的方法,这种排序方法称为()。

A.归并排序B.冒泡排序C.插入排序D.选择排序答案:C(2)从未排序序列中挑选元素,并将其依次放入已排序序列(初始时为空)的一端的方法,称为()。

A.归并排序B.冒泡排序C.插入排序D.选择排序答案:D(3)对n个不同的关键字由小到大进行冒泡排序,在下列()情况下比较的次数最多。

A.从小到大排列好的B.从大到小排列好的C.元素无序D.元素基本有序答案:B解释:对关键字进行冒泡排序,关键字逆序时比较次数最多。

(4)对n个不同的排序码进行冒泡排序,在元素无序的情况下比较的次数最多为()。

A.n+1B.n C.n-1D.n(n-1)/2答案:D解释:比较次数最多时,第一次比较n-1次,第二次比较n-2次……最后一次比较1次,即(n-1)+(n-2)+…+1=n(n-1)/2。

(5)快速排序在下列()情况下最易发挥其长处。

A.被排序的数据中含有多个相同排序码B.被排序的数据已基本有序C.被排序的数据完全无序D.被排序的数据中的最大值和最小值相差悬殊答案:C解释:B选项是快速排序的最坏情况。

(6)对n个关键字作快速排序,在最坏情况下,算法的时间复杂度是()。

A.O(n)B.O(n2)C.O(nlog2n)D.O(n3)答案:B解释:快速排序的平均时间复杂度为O(nlog2n),但在最坏情况下,即关键字基本排好序的情况下,时间复杂度为O(n2)。

(7)若一组记录的排序码为(46,79,56,38,40,84),则利用快速排序的方法,以第一个记录为基准得到的一次划分结果为()。

A.38,40,46,56,79,84B.40,38,46,79,56,84C.40,38,46,56,79,84D.40,38,46,84,56,79答案:C(8)下列关键字序列中,()是堆。

第8章VHDL顺序和并行语句归纳

第8章VHDL顺序和并行语句归纳
顺序语句 END IF
VHDL常用顺序语句、并行语句归纳
常用的并行语句有: (1) 并行信号赋值语句,用 “<=” 运算符 (2) 条件赋值语句,WHEN-ELSE (3) 选择信号赋值语句,WITH-SELECT (4) 进程语句,PROCESS 常用的顺序语句有: (1) 信号赋值语句和变量赋值语句 (2) IF- ELSE语句 (3) CASE-WHEN语句 (4) FOR-LOOP
VHDL中描述时序逻辑时必须使用进程语句。
PROCESS语句结构的一般表达格式如下
[进程标号: ] PROCESS [ ( 敏感信号参数表 [进程说明部分]
BEGIN 顺序描述语句
END PROCESS [进程标号];
) ] [IS]
8.3 进程语句归纳
8.3.2 进程结构组成
进程说明部分 数据类型、常数、变量、属性、子程序
1 WHEN s0=’1’ AND s1=’0’ ELSE 2 WHEN s0=’0’ AND s1=’1’ ELSE 3; x <= a WHEN select=0 ELSE b WHEN select=1 ELSE c WHEN select=2 ELSE d; ...
8.5 IF语句概述
(1) IF
条件句 Then 顺序语句
END IF ;
(3) IF 条件句 Then IF 条件句 Then ... END IF
END IF
(2) IF 条件句 Then 顺序语句
ELSE 顺序语句
END IF ; (4) IF 条件句 Then
顺序语句 ELSIF 条件句 Then 顺序语句 ... ELSE
图8-9 固有延时输入输出波形
A

数据结构(C语言版)(第2版)课后习题答案

数据结构(C语言版)(第2版)课后习题答案

数据结构(C语言版)(第2版)课后习题答案数据结构(C语言版)(第2版)课后习题答案目录第1章绪论1 第2章线性表5 第3章栈和队列13 第4章串、数组和广义表26 第5章树和二叉树33 第6章图43 第7章查找54 第8章排序65 第1章绪论1.简述下列概念:数据、数据元素、数据项、数据对象、数据结构、逻辑结构、存储结构、抽象数据类型。

答案:数据:是客观事物的符号表示,指所有能输入到计算机中并被计算机程序处理的符号的总称。

如数学计算中用到的整数和实数,文本编辑所用到的字符串,多媒体程序处理的图形、图像、声音、动画等通过特殊编码定义后的数据。

数据元素:是数据的基本单位,在计算机中通常作为一个整体进行考虑和处理。

在有些情况下,数据元素也称为元素、结点、记录等。

数据元素用于完整地描述一个对象,如一个学生记录,树中棋盘的一个格局(状态)、图中的一个顶点等。

数据项:是组成数据元素的、有独立含义的、不可分割的最小单位。

例如,学生基本信息表中的学号、姓名、性别等都是数据项。

数据对象:是性质相同的数据元素的集合,是数据的一个子集。

例如:整数数据对象是集合N={0,±1,±2,。

},字母字符数据对象是集合C={‘A’,‘B’,。

,‘Z’,‘a’,‘b’,。

,‘z’},学生基本信息表也可是一个数据对象。

数据结构:是相互之间存在一种或多种特定关系的数据元素的集合。

换句话说,数据结构是带“结构”的数据元素的集合,“结构”就是指数据元素之间存在的关系。

逻辑结构:从逻辑关系上描述数据,它与数据的存储无关,是独立于计算机的。

因此,数据的逻辑结构可以看作是从具体问题抽象出来的数学模型。

存储结构:数据对象在计算机中的存储表示,也称为物理结构。

抽象数据类型:由用户定义的,表示应用问题的数学模型,以及定义在这个模型上的一组操作的总称。

具体包括三部分:数据对象、数据对象上关系的集合和对数据对象的基本操作的集合。

2.试举一个数据结构的例子,叙述其逻辑结构和存储结构两方面的含义和相互关系。

数据结构第八章_排序

数据结构第八章_排序

49 38 65 97 76
三趟排序:4 13 27 38 48 49 55 65 76 97
算法描述
#define T 3 int d[]={5,3,1};
例 13 48 97 55 76 4 13 49 27 38 65 49 27 38 65 48 97 55 76 4 j j j
j
j
i
例 初始: 49 38 65 97 76 13 27 48 55 4 取d1=5 49 38 65 97 76 13 27 48 55 4 一趟分组:
一趟排序:13 27 48 55 4 取d2=3 13 27 48 55 4 二趟分组:
49 38 65 97 76 49 38 65 97 76
二趟排序:13 4 48 38 27 49 55 65 97 76 取d3=1 13 27 48 55 4 三趟分组:
初始时令i=s,j=t
首先从j所指位置向前搜索第一个关键字小于x的记录,并和rp
交换 再从i所指位置起向后搜索,找到第一个关键字大于x的记录, 和rp交换 重复上述两步,直至i==j为止 再分别对两个子序列进行快速排序,直到每个子序列只含有 一个记录为止
快速排序演示
算法描述
算法评价

38 49 49 38 65 76 97 13 97 76 97 27 13 30 97 27 97 30 初 始 关 键 字
38 49 65 13 76 27 76 13 30 76 27 76 30 97 第 一 趟
38 49 13 65 27 65 13 30 65 27 65 30
38 13 49
时间复杂度
最好情况(每次总是选到中间值作枢轴)T(n)=O(nlog2n) 最坏情况(每次总是选到最小或最大元素作枢轴)

算法导论 第八章 线性时间排序

算法导论 第八章 线性时间排序

Decision-tree example
• Sort <a1,a2, a3>=<9,4,6>
1:2
• A decision tree can model the execution of any comparison sort: --One tree for each input size n. --View the algorithm as splitting whenever it compares two elements. -- The tree contains the comparisons along all possible instruction traces. --The running time of the algorithm = the length of the path taken. -- Worst-case running time = height of tree.
Decision-tree example
• Sort <a1,a2, a3>=<9,4,6>
1:2
2:3
1:3
123
1:3
213
2:3 4≤6
132
312
231
321
• Each internal node is labelled i:j for i,j∈{1,2,…,n} --The left subtree shows subsequent comparisons if ai≤aj --The right subtree show subsequent comparisons if ai>aj
A: B:
4 1
1 2

DS第8章 排序


第8章 排序
考纲分析


归并排序算法思想比较简单,但非递归实现比较难,重 点掌握一次归并的实现和归并排序的性能分析。基数排 序不是基于比较的排序方法,在考试中出现的概率比较 低,只要求掌握基数排序的分配和收集过程。 通过本章学习,需要深刻领会各种排序的思想、各种初 始排列(正序、逆序、随机)下算法的执行特点、算法 的性能分析(时间性能、空间性能、稳定性),以及算 法的设计过程,能够在深刻理解各种排序方法的基础上 对各种排序方法进行综合比较。各种排序方法不但要求 会写出来,重要的是理解算法以及算法的执行过程,因 此,复习时要手工运行算法,掌握算法运行过程中的某 些规律。
第8章 排序

8.2 排序的基本概念 1. 考核知识点 5) 排序的分类 根据在排序过程中待排序的所有记录是否全部被 放置在内存中,可将排序方法分为内排序和外排 序两大类。内排序是指在排序的整个过程中,待 排序的所有记录全部被放置在内存;外排序是指 由于待排序的记录个数太多,不能同时放置在内 存,而需要将一部分记录放置在内存,另一部分 记录放置在外存,整个排序过程需要在内外存之 间多次交换数据才能得到排序的结果。
教材P.235.
注意比较次数 比树高少1
8.2 排序的基本概念 典型题解析



选择题2:一个待排序的n个记录可分为n/k组,每组包 含k个记录,且任一组内的各记录分别大于前一组内的 所有记录且小于后一组内的所有记录,若采用基于比较 的排序方法,其时间下界为( )。 A. O(klog2k) B. O(klog2n) C. O(nlog2k) D. O(nlog2n) 解答: C 分析:由题意,只需对每一组记录序列单独排序。对于 具有k个记录的序列进行基于比较的排序,其时间下界 为O(klog2k) ,共n/k组,因此,总的时间下界为 O(n/k*klog2k)= O(nlog2k) 。

第19讲 排序1


算法分析
• 若出现各种可能排列的概率相同,则可取最好情况 和最坏情况的平均情况 • 平均情况比较次数和移动次数为n2/4 •时间复杂度为 O(n2) •空间复杂度为 O(1)
•是一种稳定的排序方法
直接插入排序
减少关键字间的比较次数
折半插入排序
在插入 r[i] 时,利用折半查找法寻找 r[i] 的插 入位臵
无序序列 R[i..n]
R[i]
有序序列R[1..i]
无序序列 R[i+1..n]
插入排序的基本步骤:
1.在R[1..i-1]中查找R[i]的插入位臵,
R[1..j].key R[i].key< R[j+1..i-1].key; 2.将R[j+1..i-1]中的所有记录均后移一个位臵;
3.将R[i] 插入到R[j+1]的位臵上。
第3趟结果: 13 [27]
算法描述:
问题2:如何实现一次划分?
int Partition(Record r[ ], int low, int high) { pivot= r[low]; while (low < high) { while (low < high && r[high]> pivot) high--; if (low < high){ r[low]= r[high];low++;} while (low < high && r[low]<= pivot) low ++; if (low < high) {r[high]= r[low];high--;} } r[low] = pivot; return low; }

生产与运作管理-第8章---制造业作业计划


明J

i

际完工
时间超过了完工期限,
Li 0,说明Ji提前完工,Li 0,说明按期完工。Lmax max{Li}为最长延迟时间。
4、排序问题分类和表示法
排序问题的分类
(1)按机器的种类和数量:单台/多台。
■多台机器排序问题:按工件加工路线特征(相同与否),分 为单件(JOB-SHOP)作业排序和流水作业(FLOW-SHOP)排序 问题。
2、约翰森算法:
(1)从加工时间矩阵中找出最短加工时间; (2)若最短加工时间出现在机器 M1上,则对应工件应该 尽可能往前排;若最短加工时间出现在机器M2 上,则对应 工件应该尽可能往后排。然后从加工时间矩阵中划去已排序 工件的加工时间。若最短加工时间有多个,则任挑一个。
2021/4/9
17
8.2.2 两台机器排序问题的最优算法(续)
T 零件平行移动的加工周期 平 为: m T平 ti (n1)tL i1 tL : 为最长的单件工序时间
例题:已知n=4, t1 10分钟 t2 5分钟
t3 15分钟t4 10分钟
“工件”代表“服务对象”。工件可以是单个零件, 也可以是一批相同的零件。
“加工路线”是工件加工的工艺过程决定的,它是 工件加工在技术上的约束。
“加工顺序”则表示每台机器加工n个零件的先后 顺序,是排序和编制作业计划要解决的问题。
2021/4/9
6
3、假设条件与符号说明
假设条件(6个):
(1)一个工件不能同时在几台不同的的机器上加工; (2)工件在加工过程中采取平行移动方式,即当上一道
Work Center #2 Output
11
8.2.1 最长流程时间Fmax的计算

第8章++排序+课后习题答案

第8章排序1.选择题(1)从未排序序列中依次取出元素与已排序序列中的元素进行比较,将其放入已排序序列的正确位置上的方法,这种排序方法称为()。

A.归并排序B.冒泡排序C.插入排序D.选择排序(2)从未排序序列中挑选元素,并将其依次放入已排序序列(初始时为空)的一端的方法,称为()。

A.归并排序B.冒泡排序C.插入排序D.选择排序(3)对n个不同的关键字由小到大进行冒泡排序,在下列()情况下比较的次数最多。

A.从小到大排列好的B.从大到小排列好的C.元素无序D.元素基本有序(4)对n个不同的排序码进行冒泡排序,在元素无序的情况下比较的次数最多为()。

A.n+1 B.n C.n-1 D.n(n-1)/2 (5)快速排序在下列()情况下最易发挥其长处。

A.被排序的数据中含有多个相同排序码B.被排序的数据已基本有序C.被排序的数据完全无序D.被排序的数据中的最大值和最小值相差悬殊(6)对n个关键字作快速排序,在最坏情况下,算法的时间复杂度是()。

A.O(n) B.O(n2)C.O(nlog2n) D.O(n3)(7)若一组记录的排序码为(46, 79,56,38,40,84),则利用快速排序的方法,以第一个记录为基准得到的一次划分结果为()。

A.38,40,46,56,79,84 B.40,38,46,79,56,84C.40,38,46,56,79,84D.40,38,46,84,56,79 (8)下列关键字序列中,()是堆。

A.16,72,31,23,94,53 B.94,23,31,72,16,53C.16,53,23,94,31,72 D.16,23,53,31,94,72(9)堆是一种()排序。

A.插入B.选择C.交换D.归并(10)堆的形状是一棵()。

A.二叉排序树B.满二叉树C.完全二叉树D.平衡二叉树(11)若一组记录的排序码为(46,79,56,38,40,84),则利用堆排序的方法建立的初始堆为()。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

2013年7月29日
算法分析
• 若出现各种可能排列的概率相同,则可取最好情况 和最坏情况的平均情况 • 平均情况比较次数和移动次数为n2/4 •时间复杂度为 o(n2) •空间复杂度为 o(1)
•是一种稳定的排序方法
49 25* 21 25 16 4908 08 16 21 25 25* 0 1 2 3 4 5
第8章
8.1 8.2 8.3 8.4 8.5
排序
概述 插入排序 交换排序 选择排序 归并排序
8.1 概述
1. 什么是排序?
将一组杂乱无章的数据按一定规律顺次排列起来。
存放在数据表中 按关键字排序
2. 排序的目的是什么?
——便于查找!
3. 什么叫内部排序?什么叫外部排序?


若待排序记录都在内存中,称为内部排序;
• 比较次数和移动次数与初始排列有关
•最好情况下: • 每趟只需比较 1 次,不移动 • 总比较次数为 n-1 16 21 25 25* 49 08
for(i=2;i<=L.length;++i) if( L.r[i].key<L.r[i-1].key)
算法分析
49
25* 25
21
16
08
最坏情况下:第 i 趟比较i次,移动i+1次
(21,25,49,25*,16,08)
*表示后一个25
将序列存入顺序表L中,将L.r[0]作为哨兵
初态:
暂 16 25* 存 08
21 16 08
25 16 21
49 21 25* 25
49 25* 25
49 25* 16
49 08
0
1
2
i=2
3
i=3
4
i=4
5
i=5
6
i=6
完成!
算法分析
• 设对象个数为n,则执行n-1趟
•是一种稳定的排序方法
希尔排序
算法思想的出发点: 直接插入排序在基本有序时,效率较高 在待排序的记录个数较少时,效率较高
基本思想: 先将整个待排记录序列分割成若干子序列,分别进 行直接插入排序,待整个序列中的记录‚基本有 序‛时,再对全体记录进行一次直接插入排序。
希尔排序
技巧: 子序列的构成不是简单地‚逐段分割‛ 将相隔某个增量dk的记录组成一个子序列 让增量dk逐趟缩短(例如依次取5,3,1) 直到dk=1为止。 优点: 小元素跳跃式前移 最后一趟增量为1时,序列已基本有序 平均性能优于直接插入排序
比较次数
移动次数
(n 2)(n 1) i 2 i 2 n (n 4)(n 1) (i 1) 2 i 2
n
if( L.r[i].key<L.r[i-1].key) { L.r[0]=L.r[i]; // 复制为哨兵 …… L.r[j+1]=L.r[0]; //插入到正确位臵 } 北京林业大学信息学院
49
08
low m
算法分析
• 折半查找比顺序查找快,所以折半插入排序就平 均性能来说比直接插入排序要快 • 它所需要的关键码比较次数与待排序对象序列的 初始排列无关,仅依赖于对象个数。在插入第 i 个对象时,需要经过 log2i +1 次关键码比较 ,才能确定它应插入的位臵
算法分析
• 当 n 较大时,总关键码比较次数比直接插入排序 的最坏情况要好得多,但比其最好情况要差
直接插入排序
减少关键字间的比较次数
折半插入排序
• 在插入 r[i] 时,利用折半查找法寻 找 r[i] 的插入位臵
折半插入排序
i=2
21 25 49 25 16 08
low
high
折半插入排序
i=3
21 25 49 25 16 08
low m high
折半插入排序 i=4
21 25 49 25 16 08
若待排序记录一部分在内存,一部分在外存,则 称为外部排序。
注:外部排序时,要将数据分批调入内存来排序,中间 结果还要及时放入外存,显然外部排序要复杂得多。
4.排序算法的好坏如何衡量?
• 时间效率——排序速度(比较次数与移动次数) • 空间效率——占内存辅助空间的大小 • 稳定性——A和B的关键字相等,排序后A、B的先后次 序保持不变,则称这种排序算法是稳定的。
排序算法分类
规则不同 时间复杂度不同
插入排序 交换排序 选择排序 归并排序
简单排序O(n2) 先进排序O( nlog2n )
8.2 插入排序
基本思想: 每步将一个待排序的对象,按其关键码大小,插入 到前面已经排好序的一组对象的适当位臵上,直到 对象全部插入为止。 即边插入边排序,保证子序列中随时都是排好序的
low m high
21
25
49
25
16
08
low/m
high
折半插入排序
i=5
21 25 25 49 16 08
low
21
m
25 25
high
49 16 08
low/m hig 08
low
16
m
high
08
16
21 high
21
25
25
25
25
49
插入排序算法分类
最简单的排序法!
直接插入排序
折半插入排序 希尔排序
直接插入排序
排序过程:整个排序过程为n-1趟插入,即先将序列中第1个记 录看成是一个有序子序列,然后从第2个记录开始,逐个进行插 入,直至整个序列有序。
例(13,6,3,31,9,27,5,11)
【13】, 6, 3, 31, 9, 27, 5, 11 【6, 13】, 3, 31, 9, 27, 5, 11 【3, 6, 13】, 31, 9, 27, 5, 11 【3, 6, 13,31】, 9, 27, 5, 11 【3, 6, 9, 13,31】, 27, 5, 11 【3, 6, 9, 13,27, 31】, 5, 11 【3, 5, 6, 9, 13,27, 31】, 11 【3, 5, 6, 9, 11,13,27, 31】
• 在对象的初始排列已经按关键码排好序或接近有序 时,直接插入排序比折半插入排序执行的关键码比 较次数要少 • 折半插入排序的对象移动次数与直接插入排序相同 ,依赖于对象的初始排列
算法分析 • 减少了比较次数,但没有减少移动次数 • 平均性能优于直接插入排序
•时间复杂度为 o(n2) •空间复杂度为 o(1)
例:关键字序列 T=(49,38,65,97, 76, 13, 27, 49*,55, 04)
r[i] 初态:
第1趟 (dk=5) 第2趟 (dk=3) 第3趟 (dk=1)
相关文档
最新文档