第8章 排序
(完整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版)》(严蔚敏著)第八章练习题答案第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顺序和并行语句归纳
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
数据结构第八章_排序
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) 。
生产与运作管理-第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),则利用堆排序的方法建立的初始堆为()。
第8章-单因素试验结果分析
100
9
36.6 33.3 109.9
6
B 39.8 42.0 36.8 41.4 28.9 188.9 37.8 33.3 113.5
2
C 38.2 39.9 25.4 33.1 28.9 165.5 33.1 33.3
99.4
10
D 37.3 43.2 39.1 34.9 34.0 188.5 37.7 33.3 113.2
111.0
6
K 43.0 34.2 41.2 39.9 36.2 194.5 38.9 33.7 115.4
1
L 29.4 23.0 30.8 34.1 32.9 150.5 30.1 33.7
89.4
13
CK4 35.2 38.7 27.4 32.5 28.2 162.0 32.4
§2 随机排列设计的试验结果统计分析
1、方差分析
区组 品种
Ⅰ
A 10.9
1)求和:Tk;Tr ;T B 10.8 C 11.1
2)平方和的分解
D 9.1
E 11.8
ST S
xi2j
xij 2 F
G
n
10.1 10.0
H 9.3
计算校正系数C:
Tr 83.1
Ⅱ
Ⅲ
Tk
9.1 12.2 32.2 10.7
12.3 14.0 37.1 12.4
x2
x
n
按 SHIFT S-VAR 1 EXE 按 SHIFT S-VAR 2 EXE 按 SHIFT S-VAR 3 EXE
x
σn (大样本)
σn-1 (小样本)
品种
苗高观察值
A
18
21
第八章 排序演习答案
第八章排序(答案)一、选择题1.一组记录的排序码为47,78,57,39,41,85.,则利用堆排序的方法建立的初始推为。
A).78,47,57,39,41,85 B).85,78,57,39,41,47C).85,78,57,47,41,39 D).85,57,78,41,47,392.一组记录的关键码为48,79,52,38,40,84.,则利用快速排序的方法,以第一个记录为基准得到的一次划分结果为。
A).38,40, 48, 52,79,84 B).40,38, 48,79, 52,84C).40,38, 48, 52,79,84 D).40,38, 48,84, 52,793.一组记录的排序码为26,48,16,35,78,82,22,40,37,72.,其中含有5个长度为2的有序表,按归并排序的方法对该序列进行一趟归并后的结果为。
A).16, 26,35,48, 22,40, 78,82, 37,72B).16, 26,35,48, 78,82, 22, 37,40,72C).16, 26,48,35, 78,82, 22, 37,40,72D).16, 26,35,48, 78, 22, 37,40,72,824.以下序列不是堆的是A.105,85,98,77,80,61,82,40,22,13,66B.105,98,85,82,80,77,66,61,40,22,13C.13,22,40,61,66,77,80,82,85,98,105D.105,85,40,77,80,61,66,98,82,13,225、下列四种排序方法中,不稳定的方法是A.直接插入排序B.冒泡排序C.归并排序D. 简单选择排序6、对下列4个序列用快速排序方法进行排序,以序列的第1个元素为基准进行划分。
在第1趟划分过程中,元素移动次数最多的是序列A.71,75,82,90, 24,18,10,68B.71,75,68,23,10,18,90,82C.82,75,71,18,10,90,68,24D.24,10,18,71,82,75,68,907.下列排序算法中,___________算法可能在初始数据有序时,花费的时间反而最多。
数据结构C语言版第版习题答案—严蔚敏
数据结构(C语言版)(第2版)课后习题答案李冬梅2015.3目录第1章绪论.................................................................................................................... 第2章线性表 ................................................................................................................ 第3章栈和队列 ............................................................................................................ 第4章串、数组和广义表 ............................................................................................. 第5章树和二叉树......................................................................................................... 第6章图 ......................................................................................................................... 第7章查找.................................................................................................................... 第8章排序....................................................................................................................第1章绪论1.简述下列概念:数据、数据元素、数据项、数据对象、数据结构、逻辑结构、存储结构、抽象数据类型。
第8章 特殊计数序列
例3 音乐会票价为50元一张, 排队买票的 顾客中有m位持50元的钞票, n位持100 元的钞票. 售票处没有50元的零钱. 问 有多少种排队的办法使购票能顺利进 行, 不出现找不出钱的状态, 假定每位 顾客只买一张票, 而且mn. 分析: 可以用m+n维0, 1向量来表示一种 排队状态, 令该向量为: (a1,a2,, am+n), 其中ai=0 或1, i=1,2,m+n. ai=0表示第i个顾客持50元的票款; ai=1表示第i个顾客持100元的票款.
这样的向量有m个0元素, n个1元素, 共 有C(m+n, m)个. 可以建立(m+n)维0,1向量与从(0,0)点到 达(m,n)点路径间一一对应: 从(0,0)点出 发, 第i步: 若ai=0沿x轴方向走一个单位, 若ai=1沿y轴方向走一个单位, i=1,…,m+n. 要保证顾客能顺利地买到票相当于要 求路径上各点(x,y)必须满足xy.
*
C n 4n 6)C n1 (
* * C1 1
(n 2)
2n 2 (2n 2)! C n (n 1)! n 1 (n 1)! (n 1)
*
8.2 差分序列和Stirling数
令h0,h1,h2,…,hn,…为一数列。定义新 的数列h0, h1, h2,…, hn,…为一阶差 分序列,其中hn=hn+1-hn (n≥0) …… 二阶差分序列2h0, 2h1, 2h2,…, 2hn,…, 其中2hn= (hn ) =hn+1-hn =(hn+2-
hn+1)-(hn+1-hn)=hn+2-2hn+1+hn kh0, kh1, kh2,…, khn,…称为k阶差分序 列,其中 khn = (k-1hn)
排序的概念及种类
void Insert_halfSort(RecType R[],int n)
{/*对顺序表R作折半插入排序*/
int i,j,low,high,mid;
for(i=2; i<=n; i++)
{ R[0]=R[i];
2020/1/12
7
2.空间复杂度分析
排序算法的空间复杂度是指算法在执行时所需的附加存 储空间,也就是用来临时存储数据的内存使用情况。
在以后的排序算法中,若无特别说明,均假定待排序的 记录序列采用顺序表结构来存储,即数组存储方式,并假定 是按关键字递增方式排序。为简单起见,假设关键字类型为 整型。待排序的顺序表类型的类型定义如下:
15
第一趟排序结果: [4 23] 15 8 19 24
15
第二趟排序结果: [4 15 23] 8 19 24
15
第三趟排序结果: [4 8 15 23] 19 24
15
第四趟排序结果: [4 8 15 19 23] 24
15
第五趟排序结果: [4 8 15 19 23 24] 15
第六趟排序结果: [4 8 15 15 19 23
{R p1,R p2 ,…,Rpn}
(8-3)
这个将原有表中任意顺序的记录变成一个按关键字有 序排列的过程称为排序。
排序:如果排序的结果是按关键字 从小到大的次序排列的,就是增排序,否则就是 减排序。
(2) 稳定排序和不稳定排序:假设Ki=Kj(1≤i≤n ,1≤j≤n,i≠j), 且 在 排 序 前 的 序 列 中 Ri 领 先 于 Rj( 即 i<j)。 若 在 排 序 后 的 排 序 中 Ri 仍 领 先于Rj,即那些具有相同关键字的记录,经过排 序后它们的相对次序仍然保持不变,则称这种排 序方法是稳定的;反之,若Rj领先于Ri,则称所 用的方法是不稳定的。
第八章 成本管理-多种产品量本利分析(四)——顺序法
0 00 0 0
00
3 B 20% 60000 16000 12000 48000 0 18000 30000
0 00 0 0
00
顺序 品种 边际 销售 累计 边际 累计 固定 累计 累计
贡献 收入 销售 贡献 边际 成本 固定 损益
率
收入
贡献 补偿 成本
额 补偿
额
1 B 20% 60000 60000 12000 12000 12000 12000 0 0 0 0 0 0 60000
2 C 30% 40000 10000 12000 24000 60000 18000 60000
ቤተ መጻሕፍቲ ባይዱ
0 00 0 0
0
3 A 40% 60000 16000 24000 48000 0 18000 30000
0 00 0 0
00
例题: 1.某企业只生产甲产品,已知该产品的单价为180元,单位变动成本为120元 ,销售收入为9000万元,固定成本总额为2400万元,则企业的保本作业率为 ()。 A.33% B.67% C.80% D.20% 正确答案:C 解析:保本销售额=180×2400/(180-120)=7200(万元),保本作业率 =7200/9000×I00%=80%。
的标准,存在一定的主观性。 【例8-5】某公司生产销售A、B、C三种产品,销售单价分别为20元、
30元、40元;预计销售量分别为30000件、20000件、10000件;预计各产品 的单位变动成本分别为12元、24元、28元;预计固定成本总额为180000元。
【要求】 (1)按边际贡献率由高到低的顺序计算多种产品的保本点 (2)按边际贡献率由低到高的顺序计算多种产品的保本点 【答案】 (1)按边际贡献率由高到低的顺序计算多种产品的保本点 表8-3 顺序分析表(降序)
数据结构(C语言)第八章 排序
直接插入排序过程
0 21 1 25 2 49 3 4 25* 16 5 08 temp
i=1
0 21
21
1 25
25 25
2 49
49 49
3 4 25* 16
25* 16 25* 16
5 08
08 08
temp 25
i=2
21
49
21
25
25 25
49
49 25*
25* 16
25* 16 49 16
希尔排序 (Shell Sort)
基本思想设待排序对象序列有 n 个对象, 首 先取一个整数 gap < n 作为间隔, 将全部对 象分为 gap 个子序列, 所有距离为 gap 的对 象放在同一个子序列中, 在每一个子序列中 分别施行直接插入排序。然后缩小间隔 gap, 例如取 gap = gap/2,重复上述的子序列划 分和排序工作。直到最后取 gap == 1, 将所 有对象放在同一个序列中排序为止。 希尔排序方法又称为缩小增量排序。
第八章 排序
概述
插入排序
交换排序 选择排序 归并排序 基数排序 各种内排方法比较
概 述
排序: 将一个数据元素的任意序列,重新
排列成一个按关键字有序的序列。
数据表(datalist): 它是待排序数据对象的
有限集合。
主关键字(key): 数据对象有多个属性域,
即多个数据成员组成, 其中有一个属性域可用 来区分对象, 作为排序依据,称为关键字。也 称为关键字。
直接插入排序 (Insert Sort)
基本思想 当插入第i (i 1) 个对象时, 前面的 R[0], R[1], …, R[i-1]已经排好序。这时, 用 R[i]的关键字与R[i-1], R[i-2], …的关键字顺 序进行比较, 找到插入位臵即将R[i]插入, 原 来位臵上的对象向后顺移。
第8章 排序习题解析
排序习题解析11. 填空题⑴排序的主要目的是为了以后对已排序的数据元素进行()。
【解答】查找【分析】对已排序的记录序列进行查找通常能提高查找效率。
⑵对n个元素进行起泡排序,在()情况下比较的次数最少,其比较次数为()。
在()情况下比较次数最多,其比较次数为()。
【解答】正序,n-1,反序,n(n-1)/2⑶对一组记录(54, 38, 96, 23, 15, 72, 60, 45, 83)进行直接插入排序,当把第7个记录60插入到有序表时,为寻找插入位置需比较()次。
【解答】3【分析】当把第7个记录60插入到有序表时,该有序表中有2个记录大于60。
⑷对一组记录(54, 38, 96, 23, 15, 72, 60, 45, 83)进行快速排序,在递归调用中使用的栈所能达到的最大深度为()。
【解答】3⑸对n个待排序记录序列进行快速排序,所需要的最好时间是(),最坏时间是()。
【解答】O(nlog2n),O(n2)⑹利用简单选择排序对n个记录进行排序,最坏情况下,记录交换的次数为()。
【解答】n-1【分析】60是该键值序列对应的完全二叉树中最后一个分支结点。
2. 选择题⑴下述排序方法中,比较次数与待排序记录的初始状态无关的是()。
A插入排序和快速排序B归并排序和快速排序C选择排序和归并排序D插入排序和归并排序【解答】C【分析】选择排序在最好、最坏、平均情况下的时间性能均为O(n2),归并排序在最好、最坏、平均情况下的时间性能均为O(nlog2n)。
⑵下列序列中,()是执行第一趟快速排序的结果。
A [da,ax,eb,de,bb] ff [ha,gc]B [cd,eb,ax,da] ff [ha,gc,bb]C [gc,ax,eb,cd,bb] ff [da,ha]D [ax,bb,cd,da] ff [eb,gc,ha]【解答】A【分析】此题需要按字典序比较,前半区间中的所有元素都应小于ff,后半区间中的所有元素都应大于ff。
第8章参考答案08
一、选择题1.在待排序的元素序列基本有序的前提下,效率最高的排序方法是(A)。
A.插入排序B.选择排序C.快速排序D.归并排序2.设有1000个无序的元素,希望用最快的速度挑选出其中煎10个最大的元素,最好选用(C)法。
A.冒泡排序B.快速排序C.堆排序D.基数排序3.具有12个记录的序列,采用冒泡排序最少的比较次数是(C)。
A. 1B. 144C. 11D. 664.下列4种排序方法中,要求内存容量最大的是(D)。
A.插入排序B.选择排序C.快速排序D.归并排序5.初始序列已经按键值有序时,用直接插人算法进行排序,需要比较的次数为(D).A. n2B. nlog2nC. log2nD. n-16.下列4种排序方法,在排序过程中,关键码比较的次数与记录的初始排列顺序无关的是(C)。
A.直接插人排序和快速排序B.快速排序和归并排序C.直接选择排序和归并排序D.直接插人排序和归并排序7.一组记录的排序码为(46,79,56,38,40,84),则利用堆排序的方法建立的初始堆为(B)。
A. 79,46,56,38,40,84B. 84,79,56,38,40,46C. 84,79,56,46,40,38D. 84,56,79,40,46,388.一组记录的排序码为(46,79,56,38,40,84),则利用快速排序的方法,以第1个记录为基准得到的一次划分的结果为(C)。
A. 38,40,46,56,79,84B. 40,38,46,79,56,84C. 40,38,46,56,79,84D. 40,38,46,84,56,799.用某种排序方法对线性表(25,84,21,47,15,27,68,35,20)进行排序时,元素序列的变化情况如下:25,84,21,47,15,27,68,35,2020,15,21,25,47,27,68,35,8415,20,21,25,35,27,47,68,8415,20,21,25,27,35,47,68,84则采用的排序方法是(D)。
程序设计基础(C语言)第8章 查找和排序算法
8.2.3二分查找的实际应用
• 【例8.3】用二分法求下面的
一元三次方程 x3 x 1 0
在区间[1, 3]上误差不大于 10-6的根。先从键盘输入迭 代初值 x0和允许的误差 , 然后输出求得的方程根和所 需的迭代次数。
//函数功能:用二分法计算并返回方程的根 double Iteration(double x1, double x2, double eps) {
8.1.2线性查找算法的程序实现
#include <stdio.h>
#define N 40
int ReadRecord(int num[], int weight[]);
int LinSearch(int num[], int key, int n);
//主函数
int main(void)
{
int num[N], weight[N], n, pos, key;
double x0; do{
return BinSearch(num, key, mid+1, high); //在后一子表查找 } else if (key < num[mid]) {
return BinSearch(num, key, low, mid-1); //在前一子表查找 } return mid; //找到,返回找到的位置下标 }
序排列的。
int BinSearch(int num[], int key, int low, int high) {
int mid = (high + low) / 2; //取数据区间的中点 if (low > high) //递归结束条件 {
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
内容提要:本章重点讨论四类内排序方法,即插 入排序、交换排序、选择排序和归并排序。每一 类排序方法都基于同一种思想,在前三类排序方 法中,首先介绍一种简单的排序方法,再讨论一 种改进的排序方法。 学习重点: 1.各种排序方法的基本思想; 2.各种排序算法的执行过程; 3.各种排序算法的时间,空间复杂度及比较。
第 八 章
——概 述
排序算法的稳定性:假定在待排序的记录 集中,存在多个具有相同键值的记录,若 经过排序,这些记录的相对次序仍然保持 不变,即在原序列中,ki=kj,i<j,而在排 序后的序列中,ri仍在rj之前,则称这种排 序算法是稳定的;否则称此排序算法为不 稳定的。
第 八 章
——概 述
排序方法分为内排序和外排序两大类。内 排序是指在排序的整个过程中,待排序的 所有记录全部被放置在内存中;外排序是 指由于待排序的记录个数太多,不能同时 放置在内存,而需要将一部分记录放置在 内存,另一部分记录放置在外存上,整个 排序过程需要在内外存之间多次交换数据 才能得到排序的结果。
第 八 章
—插入排序
插入排序是一类藉助“插入”进行排 序的方法,其主要思想是:每次将一 个待排序的记录按其关键码的大小插 入到一个已经排好序的有序序列中, 直到全部记录排好序为止。
有序序列[1..i-1] 无序序列[i..n] r[i]
有序序列[1..i]
无序序列[i+1..n]
第 8.2.1 直接插入排序 八 章 直接插入排序的基本思想是:依次将 待排序序列中的每一个记录插入到一 个已排好序的序列中,直到全部记录 都排好序。
而是将相隔某个“增量”的记录组成一个子 序列。
接下来的问题是增量应如何取?希尔最早提 出的方法是d1=n/2,di+1=di/2。 算法描述为: for(d=n/2;d>=1;d=d/2) { 以d为增量,进行组内直接插入排序; }
第 关键问题(2)的解决方法 八 章 在每个子序列中,待插入记录和同一子序列
第 解决问题(2)的算法 八 for(i=d+1; i<=n; i++) //将r[i]插入到所属的子序列中 章
{
r[0]=r[i]; //暂存待插入记录 j=i-d; //j指向所属子序列的最后一个记录 while (j>0 && r[0]<r[j])
{
r[j+d]=r[j]; //记录后移d个位置 j=j-d; //比较同一子序列的前一个记录
中的前一个记录比较,在插入记录r[i]时,自 r[i-d]起往前跳跃式(跳跃幅度为d)搜索待插 入位置,并且r[0]只是暂存单元,不是哨兵。 当搜索位置<0,表示插入位置已找到,在搜 索过程中,记录后移也是跳跃d个位置。在整 个序列中,前d个记录分别是d个子序列中的 第一个记录,所以从第d+1个记录开始进行插 入。
有序区 已经位于最终位置
无序区 1≤j≤i-1
第 冒泡排序的表现形式有两种:“ 自上而下” 和“自下而 上” 八 “自上而下”冒泡排序的基本思想 章 将当前未排序的数据,自上而下依次对相邻的两个数据
进行比较,若为“逆序”(即a[i]>a[i+1]) ,则将两个数
据交换,即大者下沉,小者上冒。将序列照此方法从头
for (j=i-1; r[0]<r[j]; j--)
r[j+1]=r[j]; r[0]有两个作用:一是进入查找插入位置的循环 之前,它暂存了r[i]的值,使得不致于因记录的 后移而丢失r[i]的内容;二是在查找插入位置的 循环中充当“哨兵”。
第 直接插入排序算法 八 章 void insertSort (int r[ ], int n) {
到尾处理一遍称做一趟冒泡排序。 “冒泡排序”名字
的由来! 这一趟冒泡排序的效果是将当前没有排好序序列中的最 大元素下沉到已经排好序序列的最终位置
若某一趟排序过程没有任何数据发生交换,则数据 已排好序,排序过程结束。
第 这样, 在N个数据的冒泡排序中,第一趟冒泡排 八 序将序列中的最大值放到排好序序列的最后面 章 ,第二趟冒泡排序将序列中的第二大的数值放
到排好序序列的倒数第二个位置
……
第N-1趟冒泡排序将序列中最小的数值放到排 好序序列的第一个位置。 因而,在N个数据的冒泡排序中一共进行了N-1 趟冒泡。
第 冒泡排序举例 a 52 45 27 27* 32 八 例:用冒泡法对5个整数排序(按自上而下的顺序排列)。 假设5个元素为a[1]~a[5] (a[0]不用) [52 45 27 27* 32] 章
52
a[5]
存放第三大的数
第四趟比较1次,交换0次
27
27*
32
45
52
注意: 原来序列中27排在27*的前面,经过冒泡排序后, 27还是排在27*的前面,说明该方法是稳定的 !
第 八 原始冒泡排序算法实现(核心语句) 排序趟数 每一趟比较次数 章
下标 0 1 2 3 4 5 BubbleSort_Original(int a[]) { int t,i,j; 数组a 52 27* 27* 27* 32 27 27 32 45 45 45 27 32 52 for (i=1;i<5;i++) for (j=1;j<=5-i;j++) i 比较次数 交换次数 if (a[j]>a[j+1]) 1 4 4 { 2 3 3 t = a[j]; 3 2 0 交换a[j] a[j] = a[j+1]; 和a[j+1] 4 1 0 a[j+1] = t; 思考: 在第三趟和第四趟排序中没有 } 数据相交换,实际上数据已经 } 排好序。我们能否改进程序, 在第三趟提前结束冒泡?
a[5]
45
a[1]
52 27
a[2]
52
a[3]
32
a[5]
45
27
27*
32
第 续前页 八 第二趟: 章
a[1]
a[2]
a[3]
a[4]
a[5]
45
a[1]
27
a[2]
27*
a[3]
32
a[4]
32 52
a[5]
第一趟比较4次, 交换元素4次
存放最大的数
27
a[1]
45
a[2]
27*
a[3]
32
第 八 章
——概 述
将排序方法分为基于比较的排序和不基于比 较的排序,其中,基于比较的排序方法的实 现主要是通过关键码的比较和记录的移动这 两种操作,并且其最好时间下限已经被证明 为O(nlog2n) 内排序大致可分为插入排序、交换排序、选 择排序、归并排序等四类;内排序还可分为 两类:⑴简单的排序方法,其时间复杂度为 O(n2);⑵先进的排序方法,其时间复杂 度为O(nlog2n)。
a[4]
52
a[5]
27
a[1]
27* 45
a[2]
45
a[3]
32
a[4]
52
a[5]
第二趟比较3次, 交换元素3次
27
第三趟: 第四趟: a[1]
27*
a[2]
32
a[3]
45 32
a[4]
52
a[5]
存放第二大的数
第三趟比较2次, 交换元素0次
27
a[1]
27*
a[2]
32
a[3]
45
a[4]
学习难点: 1.快速排序、堆排序、归并排序等算法的设计; 2.改进算法的时间复杂度的分析。
第 ——概 八 章 8.1.1 排序的基本概念
述
排序: 给定一组数据元素(或记录)的集合{r1,r2,…,rn},其 相应的关键码分别为{k1,k2,…,kn},排序是将这些元 素排列成顺序为{rs1,rs2,…,rsn}的一个序列,使得相应 的 关 键 码 满 足 ks1≤ks2≤…≤ksn( 升 序 ) 或 ks1≥ks2≥…≥ksn(降序)。 趟:在排序的过程中,基本动作执行一轮,即对待 排序集合中的元素扫描一遍。
6 08 08 08
25* 49 25* 49 25
25* 49
思 考 r[0] 的 作 用 ?
⑴ 将整个待排序的记录序列划分成有序区和无序区,初始时有 序区为待排序记录序列中的第一个记录,无序区包括所有剩余 待排序的记录; ⑵ 将无序区的第一个记录插入到有序区的合适位置中,从而使 无序区减少一个记录,有序区增加一个记录; ⑶ 重复执行⑵,直到无序区中没有记录为止。
for (i=2; i<=n; i++) { r[0]=r[i]; j=i-1; for (j=i-1;r[0]<r[j];j--) { r[j+1]=r[j]; j=j-1; } r[j+1]=r[0]; }
}
第 直接插入排序算法性能分析 八 章 最好情况下(正序):
时间复杂度为O(n)。
最坏情况下(逆序或反序): 时间复杂度为O(n2)。 平均情况下(随机排列): 时间复杂度为O(n2) 。
第 八 章
关键问题(1)的解决方法
将第一个记录看成是初始有序表,然后从第二 个记录起依次插入到这个有序表中,直到将第n 个记录插入完毕。算法描述为: for (i=2; i<=n; i++) { 插入第i个记录,即第i趟直接插入排序;
}
第 八 章
关键问题(2)的解决方法
一般情况下,在i-1个记录的有序区r[1] ~ r[i-1]中 插入一个记录r[i]时,首先要查找r[i]的正确插入位 置,然后将r[i]插入到相应位置。算法描述为: r[0]=r[i];
第 ——概 八 章 8.1.2 排序算法的性能