第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

数据结构第八章_排序

数据结构第八章_排序

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章 排序

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章---制造业作业计划

生产与运作管理-第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章++排序+课后习题答案

第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章-单因素试验结果分析

第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语言版第版习题答案—严蔚敏

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

第8章 特殊计数序列

第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语言)第八章 排序

数据结构(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章 排序习题解析

第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

第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章 查找和排序算法

程序设计基础(C语言)第8章 查找和排序算法
mid = low + (high - low) / 2;
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. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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 排序算法的性能
相关文档
最新文档