●概述 第十章内部排序 各种排序方法可以按照不同的原则加以分类 内部排序方法的分类: 按所用策略进行分类 (1)插入排序 (2)交换排序 (3)选择排序 (4)归并排序 (5)计数排序 二、按所鼎工作量进行分类 1)简单的排序方法O(m2) (2)先进的排序方法O( nlogn) (3)基数排序 o(don) 第6页
第十章 内部排序 第6页 ⚫概 述 各种排序方法可以按照不同的原则加以分类。 内部排序方法的分类: 一、按所用策略进行分类 (1) 插入排序 (2) 交换排序 (3) 选择排序 (4) 归并排序 (5) 计数排序 二、按所需工作量进行分类 (1) 简单的排序方法 O(n 2 ) (2) 先进的排序方法 O(nlogn) (3) 基数排序 O(d•n)
●概述 第十章内部排序 在排序的过程中需进行的巫种基本操作 )比较两个关键字的大 (2)将记录从一个位置移动至另一个位置。 前一个操作对大多数排序方法来说都是必要的,而 后一种操作可以通过改变记录的存储方式来予以避免。 排序的时间开销是算法好坏的最重要的标志。排序 的时间开销主要可以用算法热行中关键字的比较次数和 记录的移动次数来衡量。 第7页
第十章 内部排序 第7页 在排序的过程中需进行的两种基本操作: (1) 比较两个关键字的大小; (2) 将记录从一个位置移动至另一个位置。 前一个操作对大多数排序方法来说都是必要的,而 后一种操作可以通过改变记录的存储方式来予以避免。 ⚫概 述 排序的时间开销是算法好坏的最重要的标志。排序 的时间开销主要可以用算法执行中关键字的比较次数和 记录的移动次数来衡量
●概述 第十章内部排序 一三种存储方式: (1)待排序记录存放在地址连续的存储单元上。 (2)待排序记录存以静态链表存储,记录间的次序由指针指示。 (3)待排序记录存放在在连续存储单元中,另设指向各个记录地 址的指针向量 设待排记录的数据类型为 define MAX SIZE 20 typedef int KeyType typedef struct KeyType keyi InfoType otherInfoi RecType typedef struct RecType r [MAX SIZE 1] int Length I SoListi 第8页
第十章 内部排序 第8页 ⚫概 述 设待排记录的数据类型为 #define MAX_SIZE 20 typedef int KeyType typedef struct { KeyType key; InfoType otherInfo; } RecType; typedef struct { RecType r[MAX_SIZE + 1]; int Length; }SqList; 三种存储方式: (1)待排序记录存放在地址连续的存储单元上。 (2)待排序记录存以静态链表存储,记录间的次序由指针指示。 (3)待排序记录存放在在连续存储单元中,另设指向各个记录地 址的指针向量
●插入排序 第十章内部排序 插入排序的基本思想是:每次将一个待排序的记 录,按其关键字的大小插入到前面已经排好序的表或 文件中的适当位置,直到全部插入完为止 直接插入推序 一基本操作是将一个记录插入到已排好序的有序表中, 从而得到一个新的、记录数增1的有序表。 直接插入排序分趙进行,一般情况下,第i趟直接 插入排序的操作为:在含在i1个记录的有序子序列 r1i11中,首先查找r的插入位置,使得 reKey≤ ri. key<r+key(0≤ji 在m之后插入一个记录r,得到含有i个记录的有序 子序列r1.il 第9页
第十章 内部排序 第9页 插 入 排 序 插入排序的基本思想是:每次将一个待排序的记 录,按其关键字的大小插入到前面已经排好序的表或 文件中的适当位置,直到全部插入完为止。 ⚫ 直接插入排序 基本操作是将一个记录插入到已排好序的有序表中, 从而得到一个新的、记录数增1的有序表。 直接插入排序分趟进行,一般情况下,第 i 趟直接 插入排序的操作为:在含在 i-1 个记录的有序子序列 r[1..i-1] 中,首先查找r[i]的插入位置j,使得 r[j].key r[i].key< r[j+1].key (0 j<i) 在r[j]之后插入一个记录 r[i] ,得到含有 i 个记录的有序 子序列 r[1..i]
直接插入排序 第十章内部排序 示例1设待排关键字集合为 49,38,65,97,76,13,27,49} 「初始关键字(49)38659776132749 i=2(38)(3849)659776132749 i=3(65)(384965)9776132749 i=4(97)(38496597)76132749 i=5(76)(3849657697)132749 i6(13)(133849657697)2749 i=7(27)(13273849657697)49 i=8(49) (1327384949657697) 个监视哨图10.1直接插入排序示例 第10页
第十章 内部排序 第10页 示例1 设待排关键字集合为 {49,38,65,97,76,13,27,49} [初始关键字] (49) 38 65 97 76 13 27 49 i=2 (38) (38 49) 65 97 76 13 27 49 i=3 (65) (38 49 65) 97 76 13 27 49 i=4 (97) (38 49 65 97) 76 13 27 49 i=5 (76) (38 49 65 76 97) 13 27 49 i=6 (13) (13 38 49 65 76 97) 27 49 i=7 (27) (13 27 38 49 65 76 97) 49 i=8 (49) (13 27 38 49 49 65 76 97) ↑监视哨 图 10.1 直接插入排序示例 直接插入排序