第10章 内部排序精品PPT课件
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
内外存之间的数据交换次数就成为影响外部 排序速度的主要因素。
6
9.1 概述 存储结构
第9章 内部排序
#define MAXSIZE 1000 // 待排顺序表最大长度 typedef int KeyType; // 关键字类型为整数类型
typedef struct { KeyType key; InfoType otherinfo;
} RcdType;
/wk.baidu.com 关键字项 // 其它数据项
// 记录类型
typedef struct {
RcdType r[MAXSIZE+1];
int
length;
} SqList;
// r[0]闲置 // 顺序表长度 // 顺序表类型
7
9.1 概述 效率分析
第9章 内部排序
(1) 时间复杂度: 关键字的比较次数和记录移动次数。
9.2.2 其它插入排序
第9章 内部排序
折半插入排序算法
void BiInsertionSort ( SqList &L )
{
for ( i=2; i<=L.length; ++i ) {
L.r[0] = L.r[i];
// 将 L.r[i] 暂存到 L.r[0]
在 L.r[1..i-1]中折半查找插入位置;
2
9.1 概述 9.2 插入排序 9.3 快速排序 9.4 选择排序 9.5 归并排序 9.6 基数排序 9.7 内部排序方法的比较
3
9.1 概述 排序方法的稳定和不稳定
第9章 内部排序
当需要排序的关键字都不相同时,排序的结 果是唯一的;
张三 80分 李四 75分 王五 85分 陈六 90分
李四 75分 张三 80分 王五 85分 陈六 90分
第9章 内部排序
折半插入排序的演示过程
0 1 2 3 4 5 6 7 8 9 10
查22 05 13 19 21 37 56 64 75 80 88 90
low
mid= (low+high)/2 high
mid high=mid-1
low=mid+1 mid
low=mid+1
high=mid-1
17
b.空间复杂度
O(1)。
15
9.2.2 其它插入排序 折半插入排序思想
第9章 内部排序
(1)在直接插入排序中,r[1..i-1] 是一个 按关键字有序的有序序列;
(2)可以利用折半查找实现“在r[1..i-1] 中查找r[i]的插入位置”;
(3)称这种排序为折半插入排序。
16
9.2.2 其它插入排序
(2) 空间复杂度: 执行算法所需的附加存储空间。
(3) 稳定算法和不稳定算法
8
9.1 概述 9.2 插入排序 9.3 快速排序 9.4 选择排序 9.5 归并排序 9.6 基数排序 9.7 内部排序方法的比较
9
第9章 内部排序
9.2、插入排序
9.2.1 直接插入排序 9.2.2 其他插入排序 //自学 9.2.3 希尔排序
// 对顺序表 L 作直接插入排序。
for ( i=2; i<=L.length; ++i )
if (L.r[i].key < L.r[i-1].key) {
L.r[0] = L.r[i];
// 复制为监视哨
for ( j=i-1; L.r[0].key < L.r[j].key; -- j )
L.r[j+1] = L.r[j]; // 记录后移
for ( j=i-1; j>=high+1; --j )
38 38 49 65 38. 76 13 27 49
38. 38 49 65 38. 76 13 27 49
38. 38
49 65 76 13 27 49
38. 38 38. 49 65 76 13 27 49
13
9.2.1 直接插入排序 直接插入排序算法
第9章 内部排序
void InsertionSort ( SqList &L ) {
10
9.2.1 直接插入排序 插入排序的思想
第9章 内部排序
(1)一个记录是有序的; (2)从第二个记录开始,将每个记录插入 到已排好序的序列中; (3)一直进行到第n个记录。
11
9.2.1 直接插入排序 算法概述
第9章 内部排序
(1)将序列中的第1个记录看成是一个有序 的子序列;
(2)从第2个记录起逐个进行插入,直至整 个序列变成按关键字有序序列为止;
9.1 概述 9.2 插入排序 9.3 快速排序 9.4 选择排序 9.5 归并排序 9.6 基数排序 9.7 内部排序方法的比较
1
第9章 内部排序
本章重点难点
重点:插入排序、快速排序、选择排序、堆排序、
归并排序、基数排序的思想和算法。
难点:堆排序的思想和算法,在实际应用中如
何根据实际情况,选择最优的排序算法。
整个排序过程需要进行比较、后移记录、 插入适当位置。从第二个记录到第n个记录共 需n-1趟。
12
9.2.1 直接插入排序 直接插入排序示例演示
第9章 内部排序
49 38 65 38. 76 13 27 49
38 49 38 65 38. 76 13 27 49
38
49 65 38. 76 13 27 49
L.r[j+1] = L.r[0]; // 插入到正确位置
}
} // InsertSort
14
9.2.1 直接插入排序
第9章 内部排序
算法分析
(1)稳定性
直接插入排序是稳定的排序方法。
(2)算法效率 a.时间复杂度
最好情况:比较O(n),移动O(1); 最坏情况:比较O(n2),移动O(n2); 平均O(n2)
在排序前后,含相等关键字的记录的相对位 置保持不变,称这种排序方法是稳定的;
反之,含相等关键字的记录的相对位置有可 能改变,称这种排序方法是不稳定的。
5
9.1 概述 内部排序和外部排序
第9章 内部排序
在排序过程中,只使用计算机的内存存放待 排序记录,称这种排序为内部排序。
排序期间文件的全部记录不能同时存放在计 算机的内存中,要借助计算机的外存才能完成排 序,称之为“外部排序”。
陈六 90分 王五 85分 张三 80分 李四 75分
4
9.1 概述
第9章 内部排序
当排序的关键字中存在相同的情况时,排 序方法不唯一;
张三 80分 李四 75分 王五 85分 陈六 80分
李四 75分 张三 80分 陈六 80分 王五 85分
李四 75分 陈六 80分 张三 80分 王五 85分