第八章 排序
⑵ 最坏情况:若待排序记录按关键字从大到小排列 (逆序),则一趟排序时:算法中的内循环体执行 i-1 ,关键字比较次数i次,记录移动次数i+1。 则就整个排序而言:
比较次数: ∑ i= i=2 n 移动次数: ∑(i+1)= i=2 n
(n-1)(n+1)
2
(n-1)(n+4)
2
一般地,认为待排序的记录可能出现的各种排列的 概率相同,则取以上两种情况的平均值,作为排序的关 键字比较次数和记录移动次数,约为n2/4,则复杂度为 O(n2) 。
直接插入排序
1、排序思想:设待排序的记录顺序存放在数组 R[1…n]中,在排序的某一时刻,将记录序列分成两 部分: ◆ R[1…i-1]:已排好序的有序部分; ◆ R[i…n]:未排好序的无序部分。 将待排序的记录Ri,插入到已排好序的记录表 R1, R2 ,…., Ri-1中,得到一个新的、记录数 增加1的有序表。 直到所有的记录都插入完为 止 显然,在刚开始排序时,R[1]是已经排好序的。
设有9个待排序的记录,关键字分别为23, 38, 22, 45, 23, 67, 31, 15, 41,冒泡排序的过程如图所 示。
初始关键字序列: 23 第一趟排序后: 第二趟排序后: 第三趟排序后: 第四趟排序后: 第五趟排序后: 第六趟排序后: 第七趟排序后: 23 22 22 22 22 15 38 22 23 23 23 15 22 22 38 23 45 23 38 23 45 31 67 31 15 31 15 41 15 41 45 45 45 45 45 41 67 67 67 67 67 67
4 4 4 4 4 4 4
-2 7 7 6 6 6 6
19 19 19 19 7 7 7
13 13 13 13 13 13 13
6 6 6 7 19 19 19
直接选择排序的过程
2.算法实现: void simple_selection_sort(int *R,int n) { int i, j , k; for (i=1; i<n; i++) { k=i ; for (j=i+1; j<=n; j++) if (R[j]<R[k]) k=j ; if (k!=j) {R[0]=R[j]; R[j]=R[k];R[j]=R[0];} } }
设有6个待排序的记录,关键字分别为29, 38, 22, 45, 23, 67,一趟快速排序的过程如图所示。
初始关键字序列: 0 29 29 i 23 38 22 45 23 67 31
j前移2个位置后, 29 R[j]放R[i]的位置: i后移1个位置后, R[i]放R[j]的位置:
38
22
22
(2)快速排序的算法
void quick_Sort(int *R,int low, int high) { int k ; if (low<high) { k=quick_one_pass(R, low, high); quick_Sort(R, low, k-1); quick_Sort(R, k+1, high); } /*序列分为两部分后分别对每个子序列排序 */ }
i=1 n-1
n(n-1)
2
i=1 n-1
3n(n-1)
2
故时间复杂度:T(n)=O(n² ) 空间复杂度:S(n)=O(1) 起泡排序是稳定排序。
快速排序
1、排序思想:通过一趟排序,将待排序记录分割成独 立的两部分,其中一部分记录的关键字均比另一部分 记录的关键字小,再分别对这两部分记录进行下一趟 排序,以达到整个序列有序。 设待排序的记录序列是R[s…t] ,在记录序列中任取 一个记录(一般取R[s])作为参照(又称为基准或枢轴), 以R[s]为基准重新排列其余的所有记录,方法是: (1)所有关键字比基准小的放R[s]之前; (2)所有关键字比基准大的放R[s]之后。 (3)以R[s]最后所在位置i作为分界,将序列R[s…t] 分割成两个子序列,称为一趟快速排序。
2、排序的稳定性 若记录序列中有两个或两个以上关键字相等的记 录: Ki =Kj(i≠j,i, j=1, 2, … n),且在排序前 Ri先于Rj(i<j),排序后的记录序列仍然是Ri先于Rj, 称排序方法是稳定的,否则是不稳定的。 评价排序算法的标准有:执行时间和所需的辅助 空间,其次是算法的稳定性。
3. 算法分析
⑴ 最好情况:若待排序记录按关键字从小到大排列 (正序),算法中的内循环无须执行,则一趟排序时: 关键字比较次数1次,记录移动次数2次(R[i]→R[0], R[0]→R[j+1])。则整个排序的关键字比较次数和记 录移动次数分别是:
比较次数: ∑1=n-1 i=2 n 移动次数: ∑ 2=2(n-1) i=2 n
19] 13 13
19] 6 19]
第五趟排序: [-2 4 6 7 13 直接插入排序的过程
2.算法实现
void straight_insert_sort(int *R ,int n) { int i, j ; for (i=2; i<=n; i++) { R[0]=R[i]; j=i-1; /* 设置哨兵 */ while(R[0]<R[j]) ) { R[j+1]=R[j]; j--; } /* 查找插入位置 */ R[j+1]=R[0]; /* 插入到相应位置 */ } }
3、排序的分类 待排序的记录数量不同,排序过程中涉及的存储 器的不同,有不同的排序分类。 ①待排序的记录数不太多:所有的记录都能存放 在内存中进行排序,称为内部排序; ②待排序的记录数太多:所有的记录不可能存放 在内存中, 排序过程中必须在内、外存之间进 行数据交换,这样的排序称为外部排序。
4、排序算法的性能 对内部排序地而言,其基本操作有两种: ◆比较两个关键字的大小; ◆存储位置的移动:从一个位置移到另一个位 置。 第一种操作是必不可少的;而第二种操作却不 是 必须的,取决于记录的存储方式。 内排序算法时间性能取决于排序过程中关键字 比较的次数和记录的移动次数。
简单选择排序
1.排序思想:通过n-i次关键字间的比较,从n-i+1个 记录中选取关键字最小的记录,然后和第i个记录进 行交换,i=1, 2, … n-1 。 例:设有关键字序列为:7, 4, -2, 19, 13, 6,直 接选择排序的过程如下图所示。
初始记录的关键字: 7 第一趟排序:-2 第二趟排序: -2 第三趟排序: -2 第四趟排序: -2 第五趟排序: -2 第六趟排序: -2
例:设有关接插入排序的过程如下图所示:
初始记录的关键字: [7] 第一趟排序: [4 第二趟排序: [-2 第三趟排序: [-2 第四趟排序: [-2 4 7] 4 4 4 -2 19 -2 19 7] 7 7 19 13 13 13 6 6 6 6
45
45 j 38 j 38
j 67 31 67 31
i 29 23 i 29 23 22
j前移2个位置后, R[j]放R[i]的位置: i i后前移1个位置后, 29 23 22 i和j的位置重合:
45
j 29 ij
67 67
31 31
45
38
一趟快速排序过程
2.算法实现
(1)一趟快速排序的算法 int quick_one_pass(int *R, int low, int high) { int i=low, j=high ; R[0]=R[i] ; do { while (R[0]<R[j]&&(j>i)) j-- ; if (j>i) {R[i]=R[j] ; i++; } while (R[i]<R[0]&&(j>i)) i++ ; if (j>i) { R[j]=R[i] ; j--; } } while(i!=j) ; /* i=j时退出扫描 */ return(i) ; }
3. 算法分析
快速排序的时间和空间性能取决于递归调用的深度, 可以用递归调用树来表示快速排序的过程。下图给出了 {23,13,49,6,31,19,28}快速排序的递归调用树: 23 19 6 13
31
28 49
(1)时间复杂度
最好情况:每次分割后左右长度基本相同,要进行 [log2n]+1次调用.时间复杂度为O(n [log2n]). 最差情况:每次分割后子比上一次少一个,要进行 n-1次调用。时间复杂度为O(n 2). 平均情况:元素为随机排列,时间复杂度为O(n [log2n]). (2)空间复杂度 快速排序是递归的需要用栈存储递归信息,栈的最 大容量和递归调用深度是一致的。最好情况O( [log2n]), 最差情况O(n),平均情况O( [log2n])。 (3)排序是不稳定的。
第8章
[内容提要]
1.排序的基本概念 2.插入排序
a.直接插入排序 b.希尔排序
排序
3.交换排序
a.冒泡排序 b.快速排序
4.选择排序
a.简单选择排序 b.堆排序
5.归并排序 6.基数排序
排序的基本概念
1、排序(Sorting) 排序是将一批(组)任意次序的记录重新排列成按 关键字有序的记录序列的过程,其定义为: 给定一组记录序列:{R1 , R2 ,…, Rn},其相应 的关键字序列是{K1 , K2 ,…, Kn} 。确定1, 2, … n的一个排列p1 , p2 ,…, pn,使其相应的关键字满 足如下非递减(或非递增)关系: Kp1≤Kp2 ≤…≤Kpn的序列{Kp1 ,Kp2 , …,Kpn} ,这种操作 称为排序。
22 23
23
23 15 23 23
31
15 23 23 23
(完整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)第八章 排序
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]; //插入
教案数据的排序和筛选
数据的排序和筛选教学目标:1. 理解排序和筛选数据的概念及重要性。
2. 学会使用常用排序和筛选方法对数据进行处理。
3. 能够应用排序和筛选技术解决实际问题。
教学内容:第一章:数据的排序1.1 排序的概念1.2 排序的依据1.3 排序的方法1.4 排序的应用第二章:数据的筛选2.1 筛选的概念2.2 筛选的方法2.3 筛选的依据2.4 筛选的应用第三章:排序和筛选的结合3.1 排序与筛选的关系3.2 排序和筛选的结合方法3.3 结合排序和筛选解决问题的实例3.4 练习:结合排序和筛选处理数据第四章:排序和筛选在实际应用中的重要性4.1 排序和筛选在数据分析中的作用4.2 排序和筛选在决策支持中的应用4.3 排序和筛选在信息检索中的重要性4.4 实际案例分享:排序和筛选在商业决策中的应用第五章:排序和筛选技术的拓展5.1 高级排序方法介绍5.2 高级筛选方法介绍5.3 排序和筛选算法的优化5.4 拓展练习:运用高级排序和筛选技术解决复杂问题教学方法:1. 讲授:讲解排序和筛选的概念、方法和应用。
2. 案例分析:分析实际案例,让学生了解排序和筛选在实际应用中的重要性。
3. 练习:引导学生运用排序和筛选方法解决实际问题。
4. 小组讨论:分组讨论排序和筛选技术的拓展应用。
教学评估:1. 课堂问答:检查学生对排序和筛选概念的理解。
2. 练习题:评估学生运用排序和筛选方法解决问题的能力。
3. 小组报告:评价学生在小组讨论中的表现及对拓展排序和筛选技术的理解。
教学资源:1. 教材:数据排序和筛选相关教材。
2. 案例:提供实际案例,用于分析排序和筛选的应用。
3. 练习题:设计具有代表性的练习题,帮助学生巩固所学知识。
4. 计算机软件:用于演示排序和筛选操作。
第六章:排序和筛选工具的使用6.1 常见排序和筛选工具概述6.2 排序工具的使用方法6.3 筛选工具的使用方法6.4 实践练习:使用排序和筛选工具处理数据第七章:数据可视化与排序筛选7.1 数据可视化的基本概念7.2 排序与筛选在数据可视化中的作用7.3 数据可视化工具的排序筛选功能7.4 案例分析:数据可视化中的排序和筛选应用第八章:排序和筛选的算法原理8.1 排序算法的原理与实现8.2 筛选算法的原理与实现8.3 排序和筛选算法的性能分析8.4 练习:实现简单的排序和筛选算法第九章:大数据排序和筛选9.1 大数据排序和筛选的挑战9.2 大数据排序和筛选的策略9.3 大数据排序和筛选的算法优化9.4 案例分享:大数据环境下的排序和筛选应用第十章:排序和筛选的应用案例分析10.1 营销数据中的排序和筛选应用10.2 金融数据中的排序和筛选应用10.3 社交媒体数据中的排序和筛选应用教学评估:1. 练习题:设计具有代表性的练习题,帮助学生巩固所学知识。
数据结构第八章_排序
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) 最坏情况(每次总是选到最小或最大元素作枢轴)
8-1-数据结构——从概念到C++实现(第3版)-王红梅-清华大学出版社
大 学
出
int length;
版 社
};
void MergeSort1(int first, int last);
void MergeSort2( );
void Print( );
排序类的定义
Sort :: Sort(int r[ ], int n)
void Sort :: Print( )
{
{
data = new int[n];
( 从 概 念
到
升序(非降序) 降序(非升序)
实 现
)
排序码:排序的依据, 简单起见,也称关键码。
不失一般性,做如下约定:
(1)进行升序排序
清 华 大 学 出 版 社
排序的数据模型是什么?
排序是对线性结构的一种操作
(2)记录只有排序码一个数据项 (3)采用顺序存储,且下标从 1 开始
正序、逆序
正序:待排序序列中的记录已按关键码排好序。
快速排序
堆排序
二路归并非递归算法
(2)不基于比较:根据待排序数据的特点所采取的其他方法
第八章 v 排序技术
8-1-2 排序算法的性能
排序算法的性能
如何衡量排序算法的性能呢?
(1)时间性能:排序算法在各种情况(最好、最坏、平均)下的时间复杂度。
数
例如,基于比较的内排序在排序过程中的基本操作:
据 结 构
( 从 概 念
到
升序(非降序) 降序(非升序)
实 现
)
排序码:排序的依据,
职工号
姓名
性别
年龄
工作时间
清 华
大
简单起见,也称关键码。 0001
0002
王刚 张亮
算法导论 第八章 线性时间排序
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
小班《按规律排序》数学教案
小班《按规律排序》数学教案第一章:认识排序1.1 教学目标:了解排序的概念,知道排序是一种将物品按照某种特定的规律进行排列的方法。
能够观察并发现物品之间的规律,进行简单的排序活动。
1.2 教学内容:讲解排序的概念,通过实物展示和图片引导幼儿观察并发现物品之间的规律。
进行简单的排序活动,如按照大小、颜色、形状等规律进行排列。
1.3 教学方法:采用实物展示、图片引导和小组合作的方式进行教学,让幼儿通过观察和操作来理解和掌握排序的概念。
1.4 教学评估:通过观察幼儿在排序活动中的表现,评估他们对排序概念的理解和应用能力。
第二章:数字排序2.1 教学目标:能够理解数字的大小顺序,能够将数字按照从小到大的顺序进行排列。
2.2 教学内容:讲解数字的大小顺序,通过数字卡片和实物展示引导幼儿观察并发现数字之间的规律。
进行数字排序活动,如按照从小到大的顺序排列数字卡片。
2.3 教学方法:采用数字卡片、实物展示和小组合作的方式进行教学,让幼儿通过观察和操作来理解和掌握数字排序的方法。
2.4 教学评估:通过观察幼儿在数字排序活动中的表现,评估他们对数字排序的理解和应用能力。
第三章:形状排序3.1 教学目标:能够识别不同的形状,能够将形状按照某种特定的规律进行排列。
3.2 教学内容:讲解形状的分类和排序方法,通过形状卡片和实物展示引导幼儿观察并发现形状之间的规律。
进行形状排序活动,如按照形状的大小、颜色等规律进行排列。
3.3 教学方法:采用形状卡片、实物展示和小组合作的方式进行教学,让幼儿通过观察和操作来理解和掌握形状排序的方法。
3.4 教学评估:通过观察幼儿在形状排序活动中的表现,评估他们对形状排序的理解和应用能力。
第四章:颜色排序4.1 教学目标:能够识别不同的颜色,能够将颜色按照某种特定的规律进行排列。
4.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) 。
第八章 时间序列
环比 定基 环比 定基
120.2 120.2 20.2 20.2
113.8 136.8 13.8 36.8
117.7 161.0 17.7 61.0
108.6 174.8 8.6 74.8
33
三、平均发展速度和平均增长速度
1. 观察期内各环比发展速度 的平均数 2. 说明现象在整个观察期内平均发展变化的 程度
动态速度指标
10
第二节
时间序列的水平分析
一、发展水平
• 是时间序列中每一项具体的指标数值。说明
现象在某一时间上所达到的水平。可是绝对数、 相对数、平均数。
• 假如时间序列为: a 0
a1
a 2 an 1 an
• a 0 叫最初水平, an 叫最末水平。 • 还有中间各项水平、基期水平和报告期水平
ai a0 ai Gi 1 a0 a0
(i 1,2,, n)
32
发展速度与增长速度的计算
第三产业国内生产总值速度计算表
年 份
国内生产总值(亿元)
2004
14930.0 — — — —
2005
17947.2
2006
20427.5
2007
24033.3
2008
26104. 3
发展速度 (%) 增长速度 (%)
18
日期 人数
•
12.31 1000
1.31 1050
3.31 1070
6.30 1100
• 求前半年的平均人数 。 1月份平均人数= (1000 1050) 2、3月份平均人数= (1050 1070)
2
2
1025
1060
4、5、6月份平均人数= (1070 1100)
数据结构(C语言版)考研复习题
数据结构(C语言版)考研复习题第1 页共19 页第一章绪论1.1 简述下列概念:数据、数据元素、数据类型、数据结构、逻辑结构、存储结构、线性结构、非线性结构。
1.2 常用的存储表示方法有哪几种?1.3 算法的时间复杂度仅与问题的规模相关吗?1.4 有时为了比较两个同数量级算法的优劣,须突出主项的常数因子,而将低次项用大"O"记号表示。
例如,设T1(n)=1.39nlgn+100n+256=1.39nlgn+O(n), T2(n)=2.0nlgn-2n=2.0lgn+O(n), 这两个式子表示,当n足够大时T1(n)优于T2(n),因为前者的常数因子小于后者。
请用此方法表示下列函数,并指出当n足够大时,哪一个较优,哪一个较劣?函数大"O"表示优劣(1) T1(n)=5n22-3n+60lgn 5n22+O(n)(2) T2(n)=3n22+1000n+3lgn 3n22+O(n)(3) T3(n)=8n22+3lgn 8n22+O(lgn)(4) T4(n)=1.5n2+6000nlgn 1.5n2+O(nlgn)第二章线性表2.1 试描述头指针、头结点、开始结点的区别、并说明头指针和头结点的作用。
2.2 何时选用顺序表、何时选用链表作为线性表的存储结构为宜?2.3 为什么在单循环链表中设置尾指针比设置头指针更好?2.4 下述算法的功能是什么?LinkList Demo(LinkList L){ // L 是无头结点单链表ListNode *Q,*P;if(L&&L->next){Q=L;L=L->next;P=L;while (P->next) P=P->next;P->next=Q; Q->next=NULL;}return L;}// Demo2.5设线性表的n个结点定义为(a0,a1,...a n-1),重写顺序表上实现的插入和删除算法:InsertList 和DeleteList.2.6 设顺序表L是一个递减有序表,试写一算法,将x插入其后仍保持L的有序性。
