直接插入排序 ppt课件

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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; //将元素插入相应位置
} }
评价排序算法好坏的标准:
一、时间复杂度算法执行所需要的时间(比较次数 和移动次数)
相关文档
最新文档