直接插入排序 ppt课件

合集下载

第十章_排序方法(数据结构ppt-严蔚敏)

第十章_排序方法(数据结构ppt-严蔚敏)

第二个问题解决方法——筛选
方法:输出堆顶元素之后,以堆中最后一个元素替代之;然 后将根结点值与左、右子树的根结点值进行比较,并与其中 小者进行交换;重复上述操作,直至叶子结点,将得到新的 堆,称这个从堆顶至叶子的调整过程为“筛选”
例 38 50 97 76
13 27 65 49 13 38
97 27 38 50 76
2 (n 4)(n 1) 记录移动次数: (i 1) 2 i 2
i 2 n
若待排序记录是随机的,取平均值 n2 关键字比较次数: T(n)=O(n² ) 4 记录移动次数:
空间复杂度:S(n)=O(1)
n2 4
折半插入排序
排序过程:用折半查找方法确定插入位置的排序叫~
初始时令i=s,j=t 首先从j所指位置向前搜索第一个关键字小于x的记录,并和rp 交换 再从i所指位置起向后搜索,找到第一个关键字大于x的记录, 和rp交换 重复上述两步,直至i==j为止 再分别对两个子序列进行快速排序,直到每个子序列只含有 一个记录为止
x 例 初始关键字: 27 49 i 完成一趟排序: ( 27 38 13 49 65 i 13) 49 97 76 j 97 49 13 j 97 65 49 27 50 j 50)
13 38
76 65 27 49
堆排序:将无序序列建成一个堆,得到关键字最小 (或最大)的记录;输出堆顶的最小(大)值后,使 剩余的n-1个元素重又建成一个堆,则可得到n个元素 的次小值;重复执行,得到一个有序序列,这个过程 叫~ 堆排序需解决的两个问题:
如何由一个无序序列建成一个堆? 如何在输出堆顶元素之后,调整剩余元素,使之成为一个新 的堆?
按排序所需工作量

第10章 排序 PPT课件

第10章 排序 PPT课件

清华大学出版社
概述
数据结构(C++版)
排序算法的存储结构
从操作角度看,排序是线性结构的一种操作,待排序 记录可以用顺序存储结构或链接存储结构存储。
假定1:采用顺序存储结构,关键码为整型,且记录 只有关键码一个数据项。
int r[n+1]; //待排序记录存储在r[1]~r[n],r[0]留做他用
假定2:将待排序的记录序列排序为升序序列。
i = 6 18 10 15 21 25 25* 18
10 15 18 21 25 25*
r[0]的作用? 暂存单元 43;+版)
关键问题(1)如何构造初始的有序序列?
解决方法:
将第1个记录看成是初始有序表,然后从第2个记录起 依次插入到这个有序表中,直到将第n个记录插入。 算法描述:
学号 0001 0002 0003 …
姓名 王军 李明 汤晓影

高数 85 64 85 …
英语 68 72 78 …
思想品德 88 92 86 …
清华大学出版社
概述
数据结构(C++版)
排序的基本概念
单键排序:根据一个关键码进行的排序; 多键排序:根据多个关键码进行的排序。
学号 0001 0002 0003 …
算法描述:
r[0]=r[i]; j=i-1; while (r[0]<r[j]) {
r[j+1]=r[j]; j--; }
r[0]有两个作用:
1. 进入循环之前暂存了r[i] 的值,使得不致于因记录 的后移而丢失r[i]的内容;
2. 在查找插入位置的循环 中充当哨兵。
清华大学出版社
插入排序
姓名 王军 李明 汤晓影

数学排序ppt课件

数学排序ppt课件
归并排序的基本思想是将两个或两个以上的有序表合并成一个新的有序 表。
归并排序的关键在于将待排序序列不断分解成若干个子序列,直到子序 列的长度为1或0,然后将这些子序列合并成一个有序序列。
归并排序的步骤
分解
将待排序序列不断分解 成若干个子序列,直到 每个子序列的长度为1
或0。
解决
对每个子序列进行排序 ,可以使用插入排序、
插入排序在每一步都保证将一个未排序的元素插入到已排序部分的合适位置,从 而保证已排序部分始终保持有序。
插入排序的步骤
01 02 03
初始化已排序部分为第一个元素, 未排序部分为其他元素。
从未排序部分取出第一个元素。
在已排序部分找到该元素的合适位 置并插入。
插入排序的时间复杂度
最好情况
当输入数组已经有序时, 插入排序的时间复杂度为 O(n)。
数学排序ppt课件
$number {01}
目录
• 引言 • 冒泡排序 • 选择排序 • 插入排序 • 快速排序 • 归并排序
01 引言
排序的定义
1 2
3
排序
将一组数据按照一定的顺序排列,以便进行查找、插入、删 除等操作。
排序的依据
可以是数值大小、字母顺序、时间先后等。
排序的稳定性
如果两个元素相等,排序后它们的位置不应改变。
02
快速排序在平均情况下的时间复杂度为 O(nlogn),其中n为数组的长度。
03
快速排序在最好情况下的时间复杂度为 O(nlogn),其中n为数组的长度。
06 归并排序
归并排序的原理
归并排序是一种分治策略的排序算法,它将待排序序列分成若干个子序 列,然后分别对子序列进行排序,最后将排好序的子序列合并成一个有 序序列。

直接插入排序算法.ppt

直接插入排序算法.ppt
0 1 2 3 4 5 6 7 8
i=4
38
38
49
65
97
76
13
27
49
i
直接插入排序算法演示
void InsertSort(SqList &L) {//对顺序表L做直接插入排序 for(i=2;i<=L.length;++i) if(L.r[i].key<L.r[i-1].key)//待排序记录关键字<有序序列最后一个记录关键字 { L.r[0] =L.r[i];//待排序记录复制为哨兵 L.r[i]=L.r[i-1]; for(j=i-2;LT(L.r[0].key,L.r[j].key);--j)//记录后移 L.r[j+1]=L.r[j]; L.r[j+1]=L.r[0];//R[i]插入到正确位置 } }
0 1 2 3 4 5 6 7 8
i=2
49
38
65
97
76
13
27
49
i
直接插入排序算法演示
void InsertSort(SqList &L) {//对顺序表L做直接插入排序 for(i=2;i<=L.length;++i) if(L.r[i].key<L.r[i-1].key)//待排序记录关键字<有序序列最后一个记录关键字 { L.r[0] =L.r[i];//待排序记录复制为哨兵 L.r[i]=L.r[i-1]; for(j=i-2;LT(L.r[0].key,L.r[j].key);--j)//记录后移 L.r[j+1]=L.r[j]; L.r[j+1]=L.r[0];//R[i]插入到正确位置 } }

数据结构排序PPT课件

数据结构排序PPT课件
—— 若待排序记录一部分在内存,一部分在外存, 则称为外部排序。
注:外部排序时,要将数据分批调入内存来 排序,中间结果还要及时放入外存,显然外 部排序要复杂得多。
在整堂课的教学中,刘教师总是让学 生带着 问题来 学习, 而问题 的设置 具有一 定的梯 度,由 浅入深 ,所提 出的问 题也很 明确
5.待排序记录在内存中怎样存储和处理?
在整堂课的教学中,刘教师总是让学 生带着 问题来 学习, 而问题 的设置 具有一 定的梯 度,由 浅入深 ,所提 出的问 题也很 明确
Void BInsertSort (SqList &L) // 折半插入排序
{ for ( i=2;i<=L.length;++i )
{ L.r[0] = L.r[ i ]; // 将L.r [i] 暂存到L.r[0]
处理方式: ① 顺序排序 —— 数据间的逻辑顺序关系通过其物理
存储位置的相邻来体现,排序时直接移动记录; 适合数据较少的情况!
② 链表排序 ——数据间的逻辑顺序关系通过结点中 的指针体现,排序时只修改指针,不移动数据;
③ 地址排序 —— 数据存储在一段连续地址的空间, 构造一个辅助表保持各数据的存放地址(指针),排 序时先修改辅助表中的地址,最后再移动记录。
在整堂课的教学中,刘教师总是让学 生带着 问题来 学习, 而问题 的设置 具有一 定的梯 度,由 浅入深 ,所提 出的问 题也很 明确
4. 什么叫内部排序?什么叫外部排序? —— 若待排序记录都在内存中,称为内部排序;
内部排序基本操作有两种: ◆ 比较两个关键字的大小;(比不可少的操作) ◆ 存储位置的移动。
i=8
0
1
2
3
4

《直接插入排序》课件

《直接插入排序》课件
插入排序、冒泡排序和选择排序之间的比较。 除了直接插入排序,我们还可以学习其他很多排序算法。
感谢观看!
1 信息
更多信息和算法请访问 我们的网站。
2 学习
访问我们的课程和图书 来提升你的技能。
3 代码
查看我们的代码库,学 习更多关于算法和数据 件
欢迎来到这个课件!在这个课件里,我们将会学习关于直接插入排序的一些 基础知识。
什么是直接插入排序?
简介
直接插入排序是一种简单 的排序算法。
适用场景
通常用于对少量元素进行 排序。
核心思想
通过不断比较和移动元素, 将一个无序的数列变为有 序。
工作原理
1
已排序的元素
从第一个元素开始,该元素可以认为已经被排序。
2
寻找插入位置
取出下一个元素,在已经排序的元素序列中从后向前扫描。
3
后移元素
如果被扫描的元素(已排序)大于新元素,将该元素后移一位。
4
插入新元素
重复步骤 3 直到找到已排序的元素小于或者等于新元素的位置。将新元素插入到该位 置后。
示例代码
Java 代码
在 Java 中实现直接插入算法。 我们可以通过使用上述代码实现直接插入排序。
时间复杂度
1 最好情况
2 最坏情况
时间复杂度为 O(n)。
时间复杂度为 O(n²)。
直接插入排序的时间复杂度取决于排序数据的初始顺序。
总结
优点
简单而有效,适用于排序少量元素。
缺点
时间复杂度为平方级别,不适合排序大量元素。
思考
你认为还有哪些实际应用可以使用直接插入排序?
常见的排序算法
几种排序算法的比较

《排序题解题技巧》课件

《排序题解题技巧》课件

高级实战演练
总结词:高阶挑战
详细描述:高级实战演练的题目难度极高,往往涉及到多种排序算法的混合应用,以及一些特殊的约 束条件和优化要求。这些题目需要解题者具备扎实的算法基础和丰富的解题经验,是对其综合能力的 极大挑战。
05 总结与反思
总结解题方法
01 02
快速排序法
快速排序是一种分而治之的排序算法,通过选择一个基准元素,将数组 分为两部分,一部分比基准元素小,另一部分比基准元素大,然后递归 地对这两部分进行排序。
选择合适的排序算法
根据题目要求和数据特点,选择适合的排序算法。例如,对于小规模数据,可以使用插入 排序;对于大规模数据,可以使用快速排序或归并排序;对于需要稳定排序的情况,可以 使用归并排序或冒泡排序。
优化解题步骤
在解题过程中,需要注意优化解题步骤,例如使用二分查找法找到插入位置等技巧,以提 高解题效率。
归并排序法
归并排序是一种稳定的排序算法,它将数组分成两半,分别对它们进行 排序,然后将两个有序的数组合并成一个有序的数组。
03
堆排序法
堆排序是一种基于二叉堆的排序算法,它通过构建最大堆或最小堆,然
后将堆顶元素与堆尾元素交换并删除,重复此过程直到堆为空。
分析解题思路
理解题目要求
在解题之前,需要仔细阅读题目要求,明确排序的顺序、是否需要稳定排序等条件。
构的排序可能效率较低。
03 经典排序题解析
经典选择排序题解析
总结词
详细描述
示例
选择排序是一种简单直观的排序算法 ,其工作原理是每一次从待排序的数 据元素中选出最小(或最大)的一个 元素,存放在序列的起始位置,直到 全部待排序的数据元素排完。
选择排序的基本思想是在未排序的序 列中找到最小(或最大)元素,存放 到排序序列的起始位置,然后再从剩 余未排序的元素中继续寻找最小(或 最大)元素,然后放到已排序序列的 末尾。以此类推,直到所有元素均排 序完毕。

大班排序规律ppt课件

大班排序规律ppt课件

其他应用场景
比赛评分排序
在比赛评比中,根据评分高低进行排 序,可以选出优胜者。
事件排队
在排队等待某些事件(如领取某物、 参加某项活动等)时,按照到达时间 的先后顺序进行排序。
06
大班排序的未来发展趋势
人工智能和机器学习在排序中的应用
人工智能和机器学习的发展将进一步改变和优化排序算法,提高排序的准确性和效 率。
优化算法也可以降低时间复杂度。例如,可以使用快速排序 和归并排序等具有线性对数时间复杂度的排序算法来替代冒 泡排序和插入排序等具有O(n²)时间复杂度的排序算法。
04
排序算法的优化和改进
使用更高效的排序算法
选择排序算法
根据数据量和特定需求选 择适合的排序算法,如快 速排序、归并排序、堆排 序等。
股票价格排序
根据股票价格排序
根据股票价格进行排序,可以让投资者更加方便地比较不同股票的 价格水平,从而做出更加明智的投资决策。
根据股票涨幅排序
根据股票的涨幅进行排序,可以让投资者更加清楚地了解哪些股票 的涨势更好,从而更加高效地利用有限的投资资金。
根据股票趋势排序
根据股票价格的Biblioteka 化趋势进行排序,可以让投资者更加清楚地了解哪 些股票有可能上涨或者下跌,从而更好地把握投资时机。
采用并行计算优化性能
并行计算
将排序算法拆分成多个子任务, 并在多个处理器或线程上同时执 行这些子任务,以加快排序速度

线程池
使用线程池来管理并控制线程的 数量和执行状态,提高系统的稳
定性和效率。
数据分配
合理分配数据到不同的处理器或 线程上,以充分发挥并行计算的
优势。
05
大班排序的应用场景

C语言常见排序算法.ppt

C语言常见排序算法.ppt

1.1.2 快速排序
算法实例:
始关键字
pivotkey 21 25 low
49 25* 16 08 high
一次交换
21
二次交换
三次交换
high-1 完成一趟排序
08 25 low
49 25* 16
high
08
49 25* 16 25
low
high
08 16 49 25*
25
low
08 16
low
常见排序算法
1.1 常见的排序算法
冒泡排序 快速排序 直接插入排序 希尔排序 选择排序 堆排序 归并排序
1.1.1 冒泡排序
算法描述
设待排序记录序列中的记录个数为n 一般地,第i趟起泡排序从1到n-i+1 依次比较相邻两个记录的关键字,如果发生逆序,则交换之 其结果是这n-i+1个记录中,关键字最大的记录被交换到第n-i+1的位 置上,最多作n-1趟。
08 16
21
high 25* 49 25
high 25* 49 25
low high
1.1.2 快速排序
算法实例:
完成一趟排序
08 16
21 25* 49 25
分别进行快速排序 有序序列
08 16
21 25* 25 49
08 16
21 25* 25 49
11
1.1.2 快速排序
算法分析:
快速排序是一个递归过程; 利用序列第一个记录作为基准,将整个序列划分为左右两个子序列。只要 是关键字小于基准记录关键字的记录都移到序列左侧; 快速排序的趟数取决于递归树的高度。 如果每次划分对一个记录定位后, 该记录的左侧子序列与右侧子序列的长 度相同, 则下一步将是对两个长度减半的子序列进行排序, 这是最理想的情 况

如何在PowerPoint中使用幻灯片排序视

如何在PowerPoint中使用幻灯片排序视

如何在PowerPoint中使用幻灯片排序视如何在PowerPoint中使用幻灯片排序视图幻灯片排序视图是PowerPoint中一个十分实用的功能,它可以帮助用户对幻灯片进行重新排序、删除或者增加等操作。

本文将向您介绍如何在PowerPoint中使用幻灯片排序视图,以方便您对幻灯片进行管理和调整。

一、打开幻灯片排序视图在PowerPoint软件中,打开您要编辑的演示文稿。

在顶部的菜单栏中,点击“视图(View)”选项卡,然后选择“幻灯片排序(Slide Sorter)”视图,即可进入幻灯片排序视图。

二、重新排序幻灯片在幻灯片排序视图中,您可以直接拖动幻灯片的缩略图来重新排序它们。

找到您想要移动的幻灯片,点击并拖动它到新的位置即可实现重新排序。

三、删除幻灯片若您想删除某个幻灯片,可以在幻灯片排序视图中选择该幻灯片的缩略图,然后点击键盘上的“删除”键,或者在菜单栏中选择“编辑(Edit)”选项卡,再点击“删除幻灯片(Delete Slide)”来删除该幻灯片。

四、增加幻灯片在幻灯片排序视图中,您可以通过两种方式增加新的幻灯片。

首先,您可以在幻灯片排序视图的底部找到一个空白的缩略图区域,双击该区域,即可添加一个新的幻灯片。

另外,您还可以在菜单栏中选择“插入(Insert)”选项卡,然后点击“幻灯片(Slide)”按钮,以插入一个新的幻灯片。

五、复制幻灯片在幻灯片排序视图中,您还可以复制幻灯片。

选中您要复制的幻灯片的缩略图,然后右键点击该缩略图,在弹出的菜单中选择“复制(Copy)”,随后右键点击想要复制到的位置的缩略图,选择“粘贴(Paste)”,即可实现幻灯片的复制。

六、隐藏幻灯片有时候,您可能并不希望所有的幻灯片都显示在演示文稿中。

在幻灯片排序视图中,您可以隐藏某个幻灯片。

选中您要隐藏的幻灯片的缩略图,然后点击菜单栏中的“幻灯片(Slide)”选项卡,找到“隐藏幻灯片(Hide Slide)”按钮,并点击它即可。

ppt课件插入顺序

ppt课件插入顺序
详细描述:在介绍完背景信息后,需要清晰地阐述主题 一的主要观点,确保听众能够准确理解主题的核心内容 。
详细描述:为了支持主题一的观点,需要提供相关的证 据或案例,例如数据、图表、图片或具体实例等,以增 强说服力。
主题二
总结词:过渡引导
详细描述:在主题一和主题二之间,需要有一个自然的过渡引导,帮助听众理解两个主题之间的联系 。
相关资料和引用
插入参考文献
在课件的附录页中,可以插入相关的参考文 献,以便学生查阅和深入研究。
引用权威资料
为了确保信息的准确性和可信度,可以引用 相关的权威资料,如学术论文、研究报告等

额外的学习资源
要点一
提供学习网站链接
在附录页中,可以提供一些与课程内容相关的在线学习资 源或网站链接,以便学生自主学习和拓展知识。
从主题二转到主题三
总结词:连贯逻辑
详细描述:在从主题二转到主题三的 过渡页中,应确保两个主题之间的逻 辑关系清晰,可以通过使用箭头、流 程图等视觉元素来展示这种逻辑关系 ,帮助听众更好地理解。
05
CATALOGUE
结尾页
感谢语
感谢语
在课件的结尾处,可以插入一段感谢语,对 听众表示感谢,增强互动和情感联系。
感谢语内容
感谢语应简洁明了,表达对听众的感激之情 ,同时也可以对本次课程内容进行简要的总 结。
联系方式和提问环节
联系方式
在课件的结尾处,可以提供讲师的联系方式,方便听众与讲师进行进一步的交流和咨询 。
提问环节
可以预留一段时间,让听众提问,讲师进行解答,增强互动和交流。
06
CATALOGUE
附录页
要点二
附加学习材料
为了帮助学生更好地理解和巩固所学知识,可以在附录页 中附加一些学习材料,如教学视频、练习题、案例分析等 。

排序算法精讲PPT课件

排序算法精讲PPT课件
if (L.r[j].key > L.r[j+1].key ) {
for(j = i - 2; L.r[0].key < L.r[j].key]; j--)
L.r[0] = L.r[j]; L.r[j] = L.r[j+1];
L.r[j+1] = L.r[j];
L.r[j+1] = L.r[0]; exchanged =TRUE;
有序序列R[1..i-1]
第i趟 简单选择排序
无序序列 R[i..n] 从中选出关键字最小的记录
有序序列R[1..i]
无序序列 R[i+1..n]
简单选择排序算法
❖ 以顺序表作为存储结构的简单选择排序算法
void SelectSort(SqList &L) {//对顺序表作简单选择排序
ffoorr((ii==11;;ii<<LL..elnenggthth; ;i+i+++) ){{
数据结构定义
#define MAXSIZE 100
typedef int Keytype;
// 定义关键字类型为整型
typedef char InfoType[100];
typedef struct { KeyType key; InfoType otherinfo;
}RedType;
// 关键字项 // 其他数据项 // 记录类型
typedef struct { RedType r[MAXSIZE+1]; int length;
}SqList;
// r[0]闲置或用作哨兵 // 顺序表长度 // 顺序表类型
直接插入排序
直接插入排序(Straight Insertion Sorting)的基本思想 是:n个待排序的元素由一个有序表和一个无序表组成, 开始时有序表中只包含一个元素。排序过程中,每次从 无序表中取出第一个元素,将其插入到有序表中的适当 位置,使有序表的长度不断加长,完成排序过程。

数据结构-排序PPT课件

数据结构-排序PPT课件
平均情况时间复杂度
O(nlogn),归并排序的平均时间复杂度为O(nlogn)。其中,n为待排序序列的长度。
06
基数排序
基数排序是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。
分配和收集
基数排序是一种稳定的排序算法,即相同的元素在排序后仍保持原有的顺序。
文件系统需要对文件和目录进行排序,以便用户可以更方便地浏览和管理文件。
数据挖掘和分析中需要对数据进行排序,以便发现数据中的模式和趋势。
计算机图形学中需要对图形数据进行排序,以便进行高效的渲染和操作。
数据库系统
文件系统
数据挖掘和分析
计算机图形学
02
插入排序
将待排序的元素按其排序码的大小,逐个插入到已经排好序的有序序列中,直到所有元素插入完毕。
简单选择排序
基本思想:将待排序序列构造成一个大顶堆,此时,整个序列的最大值就是堆顶的根节点。将其与末尾元素进行交换,此时末尾就为最大值。然后将剩余n-1个元素重新构造成一个堆,这样会得到n个元素的次小值。如此反复执行,便能得到一个有序序列了。 时间复杂度:堆排序的时间复杂度为O(nlogn),其中n为待排序元素的个数。 稳定性:堆排序是不稳定的排序算法。 优点:堆排序在最坏的情况下也能保证时间复杂度为O(nlogn),并且其空间复杂度为O(1),是一种效率较高的排序算法。
基数排序的实现过程
空间复杂度
基数排序的空间复杂度为O(n+k),其中n为待排序数组的长度,k为计数数组的长度。
时间复杂度
基数排序的时间复杂度为O(d(n+k)),其中d为最大位数,n为待排序数组的长度,k为计数数组的长度。
适用场景
当待排序数组的元素位数较少且范围较小时,基数排序具有较高的效率。然而,当元素位数较多或范围较大时,基数排序可能不是最优选择。

直接插入排序PPT幻灯片

直接插入排序PPT幻灯片

姓名 学习成绩 思想政治
XXX 262
29
XXX 250
29
XXX 249
28
XXX 248
28
XXX 243
28
XXX 242
27
XXX 231
27
XXX 211
27



总分 291 279 277 276 271 269 258 238

奖学金等次 1 2 2 2 3 3 3 3 …
8.2.1 排序概念
R[j+1]=tRe[0m]p;
} }
使用R[0]的意义
第一 进入循环之前,保存R[i]的值
监视哨
第二 在while循环中“监视”下标 是否越界。
8.2.3 改进后算法
insertsort(R){ int i,j;
for (i=2 ;i<n;i++){
R[0]=R[i]; j=i-1;
while(R[0]<R[j]) {
无序 数据
排序
有序 数据
排序算法主要有:
直接插入排序、希尔排序、冒泡排序、快速排 序、直接选择排序、堆排序、归并排序等。
8.2.2 直接插入排序基本思想
数组R
13 21 … 25 49
0…
i-1
有序区
无序区第 1个元素
36 08 … 16 i … n-1 数组下标
无序区
关键问题
如何确定 插入位置 ?
《数据结构》
8.2 直接插入排序
徐洪章
计算机科学系
教学内容: 1、排序的基本概念 2、直接插入排序算法的基本思想 3、直接插入排序算法实现 4、直接插入排序算法性能分析
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

排序过程
临时变 量temp 13 21 25 36 49 16 … 08 下标 0 1 2 3 4 5 … n-1
流程图
开始
temp=R[i]
j=i-1
N 循环判断 Y
R[j+1]=R[j]
将无序区中的第一个元 素放到临时变量中
j表示有序区中的最后 一个元素的位置
(temp<R[j])&&(j&g
次要考虑
算法执行所需要的辅助空间个数
Void insertsort(arrayType R[],int n){
int i,j,temp;
for (i=21;i<n;i++){
tRe[m0p] =R[i];
j=i-1;
浪费时间
While((tempR<[R0[]j<]R)[&j&](j>=0) ){ R[j+1]=R[j]; j--; }

姓名 学习成绩 思想政治
XXX 262
29
XXX 250
29
XXX 249
28
XXX 248
28
XXX 243
28
XXX 242
27
XXX 231
27
XXX 211
27



总分 291 279 277 276 271 269 258 238

奖学金等次 1 2 2 2 3 3 3 3 …
8.2.1 排序概念
j=i-1; //从R[i-1]开始向左查找
while((temp<R[j])&&(j>=0)){ R[j+1]=R[j]; //元素向后移动 j--; //向左继续查找
}
R[j+1]=temp; //将元素插入相应位置
} }
评价排序算法好坏的标准:
一、时间复杂度算法执行所需要的时间(比较次数 和移动次数)
R[j+1]=tRe[0m]p;
} }
使用R[0]的意义
第一 进入循环之前,保存R[i]的值
监视哨
第二 在while循环中“监视”下标 是否越界。
8.2.3 改进后算法
insertsort(R){ int i,j;
for (i=2 ;i<n;i++){
R[0]=R[i]; j=i-1;
while(R[0]<R[j]) {
比较 C (n ) 次 i n ( 数 n 1 )/2 n 2/2 i 1 n 1
移M 动 ( n ) ( 次 i 2 ) ( n 数 2 ) ( n 1 )/2 n 2 /2 i 1
知识拓展
简单、容易实现
效率不高
查找插入位置的方法不当
有没有更好 的方法来查 找插入位置?
将当前元素向后移动
j--
有序区中比较下一个
R[j]=temp 结束
找到插入位置后将第1 个元素插入
8.2.3 算法实现
Void insertsort(arrayType R[],int n){
int i,j,temp;
for (i=1;i<n;i++){ //插入所有元素
temp=R[i]; //将待排序元素放入临时变量
无序 数据
排序
有序 数据
排序算法主要有:
直接插入排序、希尔排序、冒泡排序、快速排 序、直接选择排序、堆排序、归并排序等。
8.2.2 直接插入排序基本思想
数组R
13 21 … 25 49
0…
i-1
有序区
无序区第 1个元素
36 08 … 16 i … n-1 数组下标
无序区
关键问题
如何确定 插入位置 ?
R[j+1]=R[j]; j--; }
R[j+1]=R[0] ;
} }
8.2.4 性能分析
1、理想情况
08 13 16 21 25 36 49
n1
比较C次 ( n 数 )1(n1) i1 n1
移动 M 次 ( n数 2 )2(n1) i1
2、最坏情况
49 36 25 21 16 13 08
n 1
《数据结构》
8.2 直接插入排序
徐洪章
计算机科学系
教学内容: 1、排序的基本概念 2、直接插入排序算法的基本思想 3、直接插入排序算法实现 4、直接插入排序算法性能分析
教学重点:直接插入排序算法思想
教学难点:算法实现及性能分析
教学过程
学号 1008 1005 1003 1002 1006 1007 1001 1004
相关文档
最新文档