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

(1)试问排序结束的条件是什么?
(2)编写结果实现上述排序过程的算法。7.采用单链表作存储结构,编写一个采用选择排序方法进行升序排序的函数。8.利用一维数组A可以对n个整数进行排序。其中一种排序算法的处理思想是:将n个整数分别作为数组A的n个记录的值,每次(即第i次)从记录A[i]-A[n]中挑选出最小
(1)(25,84,21,47,15,27,68,35,40)
(2)(20,15,21,25,47,27,68,35,84)
(3)(15,20,21,25,35,27,47,68,84)
(4)(15,20,21,25,27,35,47,68,84)则所采用的排序方法是()。
A.选择排序B.希尔排序C.归并排序D.快速排序
17.一组记录的关键字为(25,50,15,35,80,85,20,40,36,70),其中含有5个 长度为2的有序表,用归并排序方法对该序列进行一趟归并后的结果为()。
A.(15,25,35,50,20,40,80,85,36,70)
B.(15,25,35,50,80,20,85,40,70,36)
C.顺序或链表D.二叉树
13.排序方法中,从未排序序列中依次取出记录与已排序序列(初始时为空)中的记 录进行比较,将其放入已排序序列的正确位置上的方法,称为()。
A.希尔排序B.冒泡排序C.插入排序D.选择排序
14.每次把待排序的记录划分为左、右两个子序列,其中左序列中记录的关键字均小 于等于基准记录的关键字, 右序列中记录的关键字均大于基准记录的关键字, 则此排序方法 叫做()。
25.C,A 26.B
27.
B,D 28.C
29.D
30.D
31.C
32.B
33.C
34.D
35.C
、选择题
7.
B
13. n-l。
三、简答题
1.采用冒泡排序法排序的各趟的结果如下: 初始:17, 18, 60, 40,7,32,73, 65, 85 l趟:17, 18, 40,7,32, 60, 65, 73, 85 2趟:17, 18,7,32, 40, 60, 65, 73, 85 3趟:17,7,18, 32, 40, 60, 65, 73, 85 4趟:7, 17, 18, 32, 40, 60, 65, 73, 85 5趟:7, 17, 18, 32, 40, 60, 65, 73, 85第5趟无元素交换,则排序结束。
A.O(nlog 2 n) B.0(nlog2 k)
C.0 (klog2 n) D.0(k log 2 k)33.若要尽可能地完成对实数数组的排序,且要求排序是稳定的,则应选()。
A.快速排序B.堆排序
C.归并排序D.基数排序
34.在含有n个记录的大根堆(堆顶记录最大)中,关键字最小的记录可能存储在( )
A.(80,45,55,40,42,85)
B.(85,80,55,40,42,45)
C.(85,80,55,45,42,40)
D.(85,55,80,42,45,40) 26.下列序列中是堆的有( )。
A.(12,70,33,65,24,56,48,92,86,33)
B.(100,86,48,73,35,39,42,57,66,21)
A.堆排序B.快速排序C.冒泡排序D. Shell排序
15.排序方法中,从未排序序列中挑选记录,并将其依次放入已排序序列(初始时为 空)的一端的方法,称为()。
A.希尔排序B.归并排序C.插入排序D.选择排序
16.用某种排序方法对线性表(25,84,21,47,15,27,68,35,20)进行排序时,记 录序列的变化情况如下:
A.插入排序B.选择排序C.快速排序D.归并排序'
4.不稳定的排序方法是指在排序中,关键字值相等的不同记录的前后相对位置()。
A.保持不变B.保持相反C.不定D.无关5.内部排序是指在排序的整个过程中,全部数据都在计算机的()中完成的排序。
A.内存储器B.外存储器
C.内存储器和外存储器D.寄存器
6.用冒泡排序的方法对n个数据进行排序,第一趟共比较()对记录。
A.(40,42,45,55,80,85).
B.(42,40,45,80,55,85)
C.(42,40,45,55,80,85)
D.(42,40,45,85,55,80)
23.对n个记录的线性表进行快速排序, 为减少算法的递归深度, 以下叙述正确的是()。A.每次分区后,先处理较短的部分
B.每次分区后,先处理较长的部分
位置上。
A. Ln/21 B. Ln/2_1-1
C.1D. Ln/2_1+1
35.对任意的7个关键字迸行排序,至少要进行()次关键字之间的两两比较。
A.13 B.14
C.15 D.16
二、填空题
1.排序是将一组任意排列的记录按的值从小到大或从大到小重新排列成有序的
序列。
2.在排序前,关键字值相等的不同记录间的前后相对位置保持的排序方法称为
8.在对一组记录(54,38,96,23,15,72,60,45,83)进行直接插入排序时,当把 第7个记录60插入到有序表时,为寻找插入位置需比较 次。
9.在利用快速排序方法对一组记录(54,38,96,23,15,72,60,45,83)进行快速
排序时, 递归调用而使用的栈所能达到最大深度为,共递归调用的次数为,其
无序,则最好选用。
12.在考虑如何选择排序中,若初始数据基本正序,则选用;若初始数据基本
反序,则选用。
13.对n个记录的序列进行冒泡排序时,最少的比较次数是。
三、简答题
1.已知序列:{17,18,60,40,7,32,73,65,85),请给出采用冒泡排序法对该 序列作升序排序时每一趟的结果。
2.已知序列:{503,87,512,61,908,170,897,275,653,462),请给出采用快 速排序法对该序列作升序排序时每一趟的结果。
稳定的排序方法。
3.在排序前,关键字值相等的不同记录间的前后相对位置的排序方法称为不稳
定的排序方法。
4.外部排序是指在排序前被排序的全部数据都存储在计算机的存储器中。
5.写出一种不稳定的排序方法的名称。
6.在直接插入排序的方法中,当需要将第f个数据插入时,此时前i-l个数据是
的。
7.对一个基本有序的数据进行排序排序方法运算次数最小。
第八章排序:习题
习题
一、选择题
1.在所有排序方法中,关键字比较的次数与记录的初始排列次序无关的是()。
A.希尔排序B.冒泡排序C.插入排序D.选择排序
2.设有1000个无序的记录,希望用最快的速度挑选出其中前10个最大的记录,最好选
用( )排序法。
A.冒泡排序B.快速排序C.堆排序D.基数排序3.在待排序的记录序列基本有序的前提下,效率最高的排序方法是()。
A.堆排序B.冒泡排序C.快速排序D.插入排序
29.在含有n个记录的小根堆(堆顶记录最小)中,关键字最大的记录可能存储在( )
位置上。
A. Ln/21 B. Ln/2J-2 C.1 D. Ln/2_1+330.已知数据表A中每个记录距其最终位置不远,则采用()算法最省时间。
A.堆排序B.插入排序
C.直接选择排序D.快速排序
C.(15,25,50,35,80,85,20,36,40,70)
D.(15,25,35,50,80,20,36,40,70,85)
18.n个记录的直接插入排序所需记录关键码的最大比较次数为()。
A. nlog2n B. n2/2
C.(n+2)(n_1)/2D. n-l
19.n个记录的直接插入排序所需的记录最小移动次数为()。
21.快速排序在( )情况下最不利于发挥其长处,在()情况下最易发挥其长处。A.被排序的数据量很大
B.被排序的数据已基本有序
C.被排序的数据完全无序
D.被排序的数据中最大的值与最小值相差不大
E.要排序的数据中含有多个相同值
22.一组记录的关键字为(45,80,55,40,42,85),则利用快速排序的方法,以第一 个记录为基准得到一次划分结果是()。
中第二次递归调用是对组进行快速排序。
10.在堆排序、快速排序和归并排序中,若只从存储空间考虑,则应首先选取方法, 其次选取,最后选取方法;若只从排序结果的稳定性考虑,则应选取;若只
从平均情况下排序最快考虑, 则应选取;若只从最坏情况下排序最快并且要节省内存
考虑,则应选取方法。
11.在堆排序和快速排序中,若原始记录接近正序或反序,则选用,若原始记录
3趟:[61, 87] 170 [275] 462,503[897,908, 653, 512]
4趟:61 [87] 170 [275] 462,503 [897, 908, 653, 512]
2.采用快速排序法排序的各趟的结果如下:
初始:503, 87, 512, 61, 908, 170, 897, 275, 653, 462
l趟:[462, 87, 275, 61,170] 503 [897, 908, 653, 512]
2趟:[170,87, 275, 61] 462,503 [897,908, 653, 512]
C.与算法每次分区后的处理顺序无关
D.以上都不对
24.直接插入排序和冒泡排序的平均时间复杂度为(),若初始数据有序(即正序),
则时间复杂度为()。
A.0(n)B.0(log2n) C.0(nlog2n) D. O(n2)
25.一组记录的关键字为(45,80,55,40,42,85),则利用堆排序的方法建立的初始 堆为()。
5.已知序列:{70,83,100,65,10,32,7,9),请给出采用插入排序法对该序列 作升序排序时每一趟的结果。
合集下载

(完整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.每次把待排序的记录划分为左、右两个子序列,其中左序列中记录的关键字均小于等于基准记录的关键字,右序列中记录的关键字均大于基准记录的关键字,则此排序方法叫做( )。

(19)第八章 排序

(19)第八章 排序

21 21
i=2
0 25
1 21 21
2 25 25 25 25 25
3 49 49 49 49 49
4 5 25* 16 25* 16 25* 16 25* 16 25* 16
6 08 08 08 08 08
i=3
49
21 21
i=4
25*
21
21
25
25*
49
16
08
9
i=3
49
21 21
25 25 25 25 25
排序的时间开销: 排序的时间开销是衡量算法好 坏的最重要的标志。排序的时间开 销主要取决于算法执行中的数据比 较次数与数据移动次数。
4
内部排序分类
依排序的实现方法进行分类 插入排序、交换排序、选择排序、 归并排序、和基数排序等。 依算法的执行效率进行分类 简单排序---时间复杂度O(n2) 先进排序方法---时间复杂度O(n log2n)
25* 16 49 16
08
08 08
7
i=4
25*
21 21
i=2
0 25
1 21
21
2 25
25 25
3 49
49 49
4 5 25* 16
25* 16 25* 16
6 08
08 08
i=3
49
21
21
25
25 25
49
49 25*
25* 16
25* 16 49 16
08
08 08
8
i=4
25*
15
折半插入排序的算法 注意,最后折半结束
后有: higt+1=low void BinInsSort ( SqList &L ) { int low, high; for ( int i = 2; i < =L.length; i++) { //L.r[0]空闲无用 low = 1; high = i-1; L.r[0].key = L.r[i].key; while ( low <= high ) { //折半查找插入位置 int mid = ( low + high )/2; if ( L.r[0].key < L.r[mid].key ) high = mid - 1; else low = mid + 1; } for ( int j = i-1; j >= high+1; j-- ) L.r[j+1]= L.r[j]; //记录后移 L.r[high+1] = L.r[0]; //插入

数据结构——排序

数据结构——排序

数据结构——排序在计算机科学中,数据结构是组织和存储数据的方式,而排序则是对数据进行有序排列的操作。

排序在很多应用中都起着至关重要的作用,比如从大量数据中快速查找特定元素、生成有序的报告或者优化算法的性能等。

想象一下,你有一堆杂乱无章的数字,就像一堆随意摆放的玩具。

现在你需要把它们按照从小到大或者从大到小的顺序排列好,这就是排序要做的事情。

常见的排序算法有很多,比如冒泡排序、插入排序、选择排序、快速排序、归并排序等等。

接下来,咱们一个一个来看看。

先说说冒泡排序。

它就像是水里的泡泡,轻的往上跑,重的往下沉。

每次比较相邻的两个元素,如果顺序不对就交换它们。

这样一轮一轮地比较和交换,直到整个序列都有序。

比如说,有一组数字 5,3,8,2,1 。

第一轮比较,先比较 5 和 3 ,因为 5 大于 3 ,所以交换位置,变成 3,5,8,2,1 。

接着比较 5 和8 ,顺序对的,不交换。

再比较 8 和 2 ,交换,变成 3,5,2,8,1 。

然后比较 8 和 1 ,交换,变成 3,5,2,1,8 。

这一轮结束,最大的 8 就“浮”到了最后。

然后再从头开始第二轮比较,直到所有数字都排好序。

插入排序呢,就像是打牌时整理手牌。

每次从待排序的元素中取出一个,插入到已排序的部分中的合适位置。

还是用上面的例子 5,3,8,2,1 。

一开始,5 是已排序部分,然后 3 要插入,因为 3 小于 5 ,所以把 5 往后移一位,把 3 放在 5 前面,已排序部分就变成 3,5 。

接着 8 插入,因为 8 大于 5 ,直接放在后面,已排序部分变成 3,5,8 。

2 插入,依次和 8,5,3 比较,最后放在 3 前面,已排序部分变成 2,3,5,8 。

最后 1 插入,经过比较移动,最终排序为 1,2,3,5,8 。

选择排序则是每次从待排序的元素中选择最小(或最大)的元素,放到已排序序列的末尾。

对于 5,3,8,2,1 这组数字。

第一轮,从 5,3,8,2,1 中选择最小的 1 ,与第一个 5 交换位置,变成 1,3,8,2,5 。

数据结构第八章排序

数据结构第八章排序

例 i=1
(30) 13 70 85 39 42 6 20
i=2 13 (13 30) 70 85 39 42 6 20
…...
i=7 6 (6 i=8 20 (6
s i=8 20 (6
s i=8 20 (6
i=8 20 (6
i=8 20 (6
13 30 39 42 70 85 ) 20
13 30 39 m
❖算法描述
#define T 3 int d[]={5,3,1};

1439 2378 6458 9575 746 1439 2378 6458 9575 746
j j j j ji i i i i
一趟排序:13 247 48 3585 247 49 5358 65 97 76 jj j j ji ij ij ij i i i
13 输出:13
27
38
49
50 76 65 97
13 输出:13
97
38
49
50 76 65 27
13 输出:13 27
38
50
49
97 76 65 27
13 输出:13 27
65
50
49
97 76 38 27
13 输出:13 27 38
49
50
65
97 76 38 27
13 输出:13 27 38
k
k
i=2 一趟: 13 [3287 65 97 76 49 3287 ]
jjjjj 二趟: 13 27 [65 97 76 49 38 ]
三趟: 13 27 38 [97 76 49 65 ]
四趟: 13 27 38 49 [76 97 65 ]

数据结构第八章_排序

数据结构第八章_排序

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) 最坏情况(每次总是选到最小或最大元素作枢轴)

(完整word版)大学数据结构期末知识点重点总结(考试专用)

(完整word版)大学数据结构期末知识点重点总结(考试专用)

第一章概论1。

数据结构描述的是按照一定逻辑关系组织起来的待处理数据元素的表示及相关操作,涉及数据的逻辑结构、存储结构和运算2。

数据的逻辑结构是从具体问题抽象出来的数学模型,反映了事物的组成结构及事物之间的逻辑关系可以用一组数据(结点集合K)以及这些数据之间的一组二元关系(关系集合R)来表示:(K, R)结点集K是由有限个结点组成的集合,每一个结点代表一个数据或一组有明确结构的数据关系集R是定义在集合K上的一组关系,其中每个关系r(r∈R)都是K×K上的二元关系3.数据类型a。

基本数据类型整数类型(integer)、实数类型(real)、布尔类型(boolean)、字符类型(char)、指针类型(pointer)b。

复合数据类型复合类型是由基本数据类型组合而成的数据类型;复合数据类型本身,又可参与定义结构更为复杂的结点类型4.数据结构的分类:线性结构(一对一)、树型结构(一对多)、图结构(多对多)5。

四种基本存储映射方法:顺序、链接、索引、散列6。

算法的特性:通用性、有效性、确定性、有穷性7.算法分析:目的是从解决同一个问题的不同算法中选择比较适合的一种,或者对原始算法进行改造、加工、使其优化8.渐进算法分析a.大Ο分析法:上限,表明最坏情况b.Ω分析法:下限,表明最好情况c.Θ分析法:当上限和下限相同时,表明平均情况第二章线性表1.线性结构的基本特征a.集合中必存在唯一的一个“第一元素”b。

集合中必存在唯一的一个“最后元素"c.除最后元素之外,均有唯一的后继d。

除第一元素之外,均有唯一的前驱2.线性结构的基本特点:均匀性、有序性3。

顺序表a.主要特性:元素的类型相同;元素顺序地存储在连续存储空间中,每一个元素唯一的索引值;使用常数作为向量长度b。

线性表中任意元素的存储位置:Loc(ki)= Loc(k0)+ i * L(设每个元素需占用L个存储单元)c. 线性表的优缺点:优点:逻辑结构与存储结构一致;属于随机存取方式,即查找每个元素所花时间基本一样缺点:空间难以扩充d.检索:ASL=【Ο(1)】e。

《数据结构》八大排序算法必读!

引言概述:数据结构是计算机科学中的重要基础知识,而排序算法则是数据结构中最基本也是最常用的算法之一。

本文将介绍数据结构中的八大排序算法,包括插入排序、选择排序、冒泡排序、快速排序、归并排序、堆排序、计数排序和桶排序。

通过深入理解这些排序算法的原理和特点,能够为我们在实际编程中选择合适的排序算法提供指导。

正文内容:一、插入排序1.直接插入排序:将待排序的元素逐个插入已排好序的序列中。

2.希尔排序:将待排序的元素按照一定间隔分组,然后在每个分组内进行插入排序操作。

二、选择排序1.简单选择排序:每次从待排序序列中选择最小的元素放到已排序序列的末尾。

2.堆排序:构建一个大顶堆,每次取堆顶元素并调整堆的结构。

三、冒泡排序1.冒泡排序:通过相邻元素的比较和交换,将最大的元素逐渐冒泡到待排序序列的末尾。

四、快速排序1.快速排序:选择一个基准元素,将序列分为两部分,小于基准元素的放在左边,大于基准元素的放在右边,然后递归地对左右子序列进行排序。

五、归并排序1.归并排序:将序列分成两部分分别进行排序,然后将两个有序的子序列合并成一个有序序列。

六、堆排序1.堆排序:通过构建一个最大堆或最小堆,将最大或最小元素依次取出并调整堆的结构,从而得到有序序列。

七、计数排序1.计数排序:统计待排序序列中各元素出现的次数,然后按照元素的大小顺序从小到大依次输出。

八、桶排序1.桶排序:将待排序的元素分到不同的桶中,每个桶中的元素可以使用其他排序算法进行排序,然后将桶中的元素按顺序依次输出。

总结:数据结构中的八大排序算法各有特点和适用场景。

插入排序适用于小规模的数据排序,选择排序适用于大规模且基本有序的数据排序,冒泡排序适用于简单排序,快速排序适用于大规模数据排序,归并排序适用于链表和外排序,堆排序适用于需要稳定排序的场景,计数排序适用于数据范围较小的场景,桶排序适用于浮点数排序。

通过熟练掌握这些排序算法的原理和实现方式,可以在实际编程中根据需求选择合适的排序算法,提升程序的效率和性能。

数据结构第八章排序-修改精品文档69页

*内排序是指在排序过程中记录全部存放在内存的 排序; *外排序是指在排序过程中数据量太大,不能同时 存放在内存,在排序过程中不断进行内、外存之 间数据交换的排序。
排序的分类
数据表的存储方式
*顺序存储方式通过移动记录的相对存储位置实
77 22 88
11 22 30 44 77 88
排序的基本概念 插入排序 交换排序 选择排序 归并排序 基数排序 各种方法的比较
1
§8.1 排序的概念
什么是排序(Sorting)?
简单地说,排序就是将一组杂乱无章 的数据按一定的规律排列起来(递增 或递减)。
排序是计算机中经常遇到的操作。
排序的概念
数据表(Data List) 待排序的记录的有限集合。 关键字(Key) 作为排序依据的各记录中的属性域。 排序(Sorting)使一组任意排列的数据表变成一组
按关键字线性有序(递增或递减)的数据表。
排序前:数据表: { R1 ,R2 , R3 ,……, Rn }
关键字序列: { k1 , k2 , k3 ,……, kn }
排序后:数据表: { R’1 ,R’2 , R’3 ,……, R’n }
关键字序列: { k’1 , k’2 , k’3 ,……, k’n }
*链式存储方式通过各结点修改指针实现排序
排序前 h 排序后 h
30 11 30 11
44 77
22
44
77 22
5
排序算法分析
排序的时间效率: 通常用算法执行中的数据比较次数
与数据移动次数来衡量。
排序的空间效率:在算法执行时所需的附加存储空间多
少来衡量。
为简单起见,数据的存储结构采用顺序方式存储, 同时假定关键字是整数。记录存储数据类型如下:

数据结构第八章

第八章排序8.1 基本概念排序在数据处理中经常遇到,也是一种重要的运算。

排序的方法很多,主要原则是时间复杂度和空间复杂度最低。

关键字:对象是由记录组成的文件,而记录是由若干个数据项(域)组成,其中有一项或多项可用来标识一个记录称关键字。

排序:整理文件记录,使它们按关键字递增或递减的次序排列。

R1,R2,……,Rn==>Ri1,Ri2,……,Rin内部排序:整个文件都在内存中处理,不涉及内外存交换,称为内部排序。

外部排序:排序过程中涉及到内外存交换,不能一次完成,称为外部排序。

排序分类:插入排序、交换排序、选择排序、归并排序、分配排序等等。

稳定性:在排序过程中,关键字相同的记录相对位置不发生改变叫稳定的排序方法,否则称为不稳定的排序方法。

存储结构:1.数组2.链表3.索引表假设:我们所处理的对象是R[n]。

定义:typedef struct{ int key;datatype other;}rectype;rectype R[n];8.2 插入排序1.直接插入排序基本思想:R[1],R[2],……,R[i],……,R[n]假设排序过程中的某一时刻,R被划分成两个子区,R[1]……R[i-1]已经有序,R[i]……R[n]为无序区。

那么用R[i]和前面的R[1]……R[i-1]进行比较,将R[i]插入到适当的位置。

初始令i=1,从R[2]开始直至R[n]。

在插入过程中有序区的记录将后移。

例图:算法:void INSERTSORT(rectype R[]){ int i,j;for(i=2;i<n;i++){R[0]=R[i];j=i-1;while(R[0].key<R[j].key)R[j+1]=R[j--];R[j+1]=R[0];}}监视哨:哨兵R[0]1)保存了R[i],还可做中间变量。

2)保证循环结束(最后比较R[0].key<R[0].key?)。

算法分析:1)正序(最好):Cmin=n-1次,无需后移记录Mmin=2(n-1)次移动2)反序(最坏):Cmax=∑i=(n+2)(n-1)/2=O(n2) (i=2…n)Mmax=∑(i-1+2)=(n-1)(n+4)/2=O(n2) (i=2…n)3)直接插入排序方法是稳定的排序方法。

(完整word版)数据结构(c语言版)课后习题答案完整版资料

第1章绪论5.选择题:CCBDCA6.试分析下面各程序段的时间复杂度。

(1)O(1)(2)O(m*n)(3)O(n2)(4)O(log3n)(5)因为x++共执行了n—1+n—2+……+1= n(n—1)/2,所以执行时间为O(n2)(6)O(n)第2章线性表1.选择题babadbcabdcddac2.算法设计题(6)设计一个算法,通过一趟遍历在单链表中确定值最大的结点。

ElemType Max (LinkList L ){if(L—〉next==NULL) return NULL;pmax=L-〉next;//假定第一个结点中数据具有最大值p=L-〉next—>next;while(p != NULL ){//如果下一个结点存在if(p->data > pmax—>data) pmax=p;p=p->next;}return pmax-〉data;(7)设计一个算法,通过遍历一趟,将链表中所有结点的链接方向逆转,仍利用原表的存储空间.void inverse(LinkList &L) {// 逆置带头结点的单链表Lp=L-〉next;L->next=NULL;while (p){q=p—>next;// q指向*p的后继p->next=L—>next;L—>next=p; // *p插入在头结点之后p = q;}}(10)已知长度为n的线性表A采用顺序存储结构,请写一时间复杂度为O(n)、空间复杂度为O(1)的算法,该算法删除线性表中所有值为item的数据元素.[题目分析]在顺序存储的线性表上删除元素,通常要涉及到一系列元素的移动(删第i个元素,第i+1至第n个元素要依次前移)。

本题要求删除线性表中所有值为item的数据元素,并未要求元素间的相对位置不变。

因此可以考虑设头尾两个指针(i=1,j=n),从两端向中间移动,凡遇到值item的数据元素时,直接将右端元素左移至值为item的数据元素位置。

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