直接插入排序 ppt课件
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
将当前元素向后移动
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]; //将待排序元素放入临时变量
比较 C (n ) 次 i n ( 数 n 1 )/2 n 2/2 i 1 n 1
移M 动 ( n ) ( 次 i 2 ) ( n 数 பைடு நூலகம் ) ( n 1 )/2 n 2 /2 i 1
知识拓展
简单、容易实现
效率不高
查找插入位置的方法不当
有没有更好 的方法来查 找插入位置?
无序 数据
排序
有序 数据
排序算法主要有:
直接插入排序、希尔排序、冒泡排序、快速排 序、直接选择排序、堆排序、归并排序等。
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
排序过程
临时变 量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>=0)
主要考虑
二、空间复杂度-
次要考虑
算法执行所需要的辅助空间个数
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--; }
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 直接插入排序
徐洪章
计算机科学系
教学内容: 1、排序的基本概念 2、直接插入排序算法的基本思想 3、直接插入排序算法实现 4、直接插入排序算法性能分析
教学重点:直接插入排序算法思想
教学难点:算法实现及性能分析
教学过程
学号 1008 1005 1003 1002 1006 1007 1001 1004
…
姓名 学习成绩 思想政治
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; //将元素插入相应位置
} }
评价排序算法好坏的标准:
一、时间复杂度算法执行所需要的时间(比较次数 和移动次数)
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]; //将待排序元素放入临时变量
比较 C (n ) 次 i n ( 数 n 1 )/2 n 2/2 i 1 n 1
移M 动 ( n ) ( 次 i 2 ) ( n 数 பைடு நூலகம் ) ( n 1 )/2 n 2 /2 i 1
知识拓展
简单、容易实现
效率不高
查找插入位置的方法不当
有没有更好 的方法来查 找插入位置?
无序 数据
排序
有序 数据
排序算法主要有:
直接插入排序、希尔排序、冒泡排序、快速排 序、直接选择排序、堆排序、归并排序等。
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
排序过程
临时变 量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>=0)
主要考虑
二、空间复杂度-
次要考虑
算法执行所需要的辅助空间个数
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--; }
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 直接插入排序
徐洪章
计算机科学系
教学内容: 1、排序的基本概念 2、直接插入排序算法的基本思想 3、直接插入排序算法实现 4、直接插入排序算法性能分析
教学重点:直接插入排序算法思想
教学难点:算法实现及性能分析
教学过程
学号 1008 1005 1003 1002 1006 1007 1001 1004
…
姓名 学习成绩 思想政治
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; //将元素插入相应位置
} }
评价排序算法好坏的标准:
一、时间复杂度算法执行所需要的时间(比较次数 和移动次数)