第5章 排序与选择
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
排序结果: 排序结果:(13 27 38 49 65 76 97)
2011-11-7 福州大学数学与计算机科学学院 13
《算法与数据结构》
Algorithms and Data Structures
(2)算法描述 算法描述
• void insertion ( Item a[], int n) • {// 插入排序算法 • int i,j; • Item temp; • for (i=1; i<n; i++) • { • temp = a[i]; • j=i-1; • while(temp<a[j]&&j>=0) • { • a[j+1]=a[j]; • j--; • } • a[j+1]=temp; • } • }
2011-11-7 福州大学数学与计算机科学学院 2
《算法与数据结构》
Algorithms and Data Structures
2、基本概念与术语: 、基本概念与术语: (1)数据对象 记录 的键值 数据对象(记录 的键值key和卫星数据 数据对象 记录)的键值 和卫星数据 (2)稳定的排序算法与不稳定的排序算法 稳定的排序算法与不稳定的排序算法 (3)就地排序与非就地排序 就地排序与非就地排序 (4)排序中的基本操作:比较和移动 交换 排序中的基本操作: 交换) 排序中的基本操作 比较和移动(交换 (5)排序算法复杂度的度量 排序算法复杂度的度量: 排序算法复杂度的度量 算法步数 键值比较次数
i =1
2
交换次数: 交换次数: ∑ (n − i ) = (n 2 − n) 2
i =1
n
1
∴ T(n)=O(n²)
2011-11-7 福州大学数学与计算机科学学院 9
《算法与数据结构》
Algorithms and Data Structures
(4)改进的冒泡排序 改进的冒泡排序
•
• • • • • • • • • • • • •
福州大学数学与计算机科学学院 10
2011-11-7
《算法与数据结构》
Algorithms and Data Structures
(5)改进算法分析 改进算法分析
时间复杂度 最好情况(正序) 最好情况(正序) 比较次数:n-1 比较次数: 交换次数: 交换次数:0 最坏情况(逆序) 最坏情况(逆序) n −1 比较次数: 比较次数: ∑ ( n − i ) = 1 ( n 2 − n ) 2 i =1 n 1 ( n − i ) = ( n 2 − n) 交换次数: 交换次数: ∑ 2 i =1 ∴ T(n)=O(n²)
i =
n ( n − 1) 2
福州大学数学与计算机科学学院
15
《算法与数据结构》
Algorithms and Data Structures
5.1.3 二分插入排序
(1)基本思想:用二分查找方法确定插入位置的排序 )基本思想:
例 i=1 …... i=7 6 (6 13 30 39 13 30 39 m 13 30 39 m j 13 30 39 s mj 13 30 39 j s 42 70 85 ) 20 42 70 85 ) 20 j 42 70 85 ) 20 42 70 85 ) 20 42 70 85 ) 20 42 70 85 )
《算法与数据结构》
Algorithms and Data Structures
第5章 排序与选择 章
5.0 引言 5.1 简单排序算法 5.2 堆排序算法 5.3 快速排序算法 5.4 合并排序算法 5.5 线性时间排序算法 5.6 中位数与第 小元素 中位数与第k小元素
2011-11-7 福州大学数学与计算机科学学院 1
2011-11-7
福州大学数学与计算机科学学院
12
《算法与数据结构》
Algorithms and Data Structures
例:
i=0
( 49 ) 38 65 97 76 13 27
i=1 38 (38 49) 65 97 76 13 27 i=2 65 (38 49 65) 97 76 13 27 i=3 97 (38 49 65 97 ) 76 13 27 i=4 76 (38 49 65 76 97) 13 27 i=5 13 (13 38 49 65 76 97) 27 i=6 27 (13 27 38 49 65 76 ) 97 38 49 65 76 97 27 j j j j j j=i-1
Algorithms and Data Structures
(2)算法描述 )
(3)算法分析: )算法分析: 时间复杂度: 时间复杂度:T(n)=O(n²) 空间复杂度: 空间复杂度:S(n)=O(n)
2011-11-7 福州大学数学与计算机科学学院 17
《算法与数据结构》
Algorithms and Data Structures
2011-11-7
福州大学数学与计算机科学学院
18
《算法与数据结构》
Algorithms and Data Structures
初始: 例 初始:49 38 65 97 76 13 27 48 55 4 取d1=5 49 一趟分组: 一趟分组: 38 65 97 76 13 27 48 55 4
一趟排序: 一趟排序: 13 27 48 55 4 取d2=3 13 二趟分组: 二趟分组: 27 48 55 4
5.1.4 希尔排序 缩小增量法 希尔排序(缩小增量法 缩小增量法) (1)基本思想:先取一个正整数 1<n,把所 )基本思想:先取一个正整数d , 有相隔d1的记录放一组,组内进行直接插入 有相隔 的记录放一组, 排序;然后取d 排序;然后取 2<d1,重复上述分组和排序操 直至d , 作;直至 i=1,即所有记录放进一个组中排 序为止。 序为止。
38 49 13 49 13 27 27 49 30 30 49 76
13 38 27 38 13 38 30 27 30 38 49
13 27 30 38
13 27 30
第 二 趟
第 三 趟
第 四 趟
第 五 趟
2011-11-7
福州大学数学与计算机科学学院
6
《算法与数据结构》
Algorithms and Data Structures
《算法与数据结构》
Algorithms and Data Structures
5.0
1、学习要点: 学习要点:
• 理解排序问题的实质
引言
• 掌握简单排序算法的设计思想与分析方法 • 掌握快速排序算法的设计思想与分析方法 • 理解随机化思想在快速排序算法中的应用 • 理解三数取中划分算法和三划分算法的改进策略 • 掌握合并排序算法的基本思想及实现方法 • 掌握计数排序算法的设计思想与分析方法 • 掌握桶排序算法的设计思想与分析方法 • 理解线性时间排序与基于比较排序算法的差别和适用范围 • 掌握平均情况下线性时间选择算法的设计思想与分析方法 • 掌握最坏情况下线性时间选择算法的设计思想与分析方法
2011-11-7 福州大学数学与计算机科学学院 8
《算法与数据结构》
Algorithms and Data Structures
(3)算法分析 算法分析
时间复杂度 最好情况(正序) 最好情况(正序) n −1 比较次数: 比较次数: (n − i ) = 1 (n 2 − n) ∑
i =1
2
交换次数: 交换次数:0 最坏情况(逆序) 最坏情况(逆序) n −1 比较次数: 比较次数: ∑ (n − i ) = 1 (n 2 − n)
void bubble_Modified(Item a[ ],int n) {// 改进的冒泡排序 int flag=1; ; for (int i = n; i>1 && flag; i--) { flag=0; for (int j = 0; j<i-1 ; j++) if (a[j] > a[j+1]) { flag=1; Swap(a[j],a[j+1]); , } } }
2011-11-7 福州大学数学与计算机科学学院 11
《算法与数据结构》
Algorithms and Data Structures
5.1
5.1.2 直接插入排序 (1)基本思想: 基本思想: 基本思想
简单排序算法
整个排序过程为n-1趟插入,即先将序列中第 趟插入,即先将序列中第1 整个排序过程为 趟插入 个记录看成是一个有序子序列,然后从第2个记录 Βιβλιοθήκη Baidu记录看成是一个有序子序列,然后从第 个记录 开始,逐个进行插入,直至整个序列有序。 开始,逐个进行插入,直至整个序列有序。
2011-11-7 福州大学数学与计算机科学学院 14
《算法与数据结构》
Algorithms and Data Structures
(3)算法分析 算法分析
时间复杂度 若待排序记录按关键字从小到大排列(正序 正序) 若待排序记录按关键字从小到大排列 正序 n −1 关键字比较次数: 关键字比较次数: 1 = n − 1
基于数字和地址计算的排序方法
计数排序 桶排序 基数排序
2011-11-7 福州大学数学与计算机科学学院
返回章目录
4
《算法与数据结构》
Algorithms and Data Structures
5.1 5.1.1 冒泡排序
(1)基本思想: 基本思想: 基本思想
简单排序算法
将第一个记录的关键字与第二个记录的关键字进行比较, 将第一个记录的关键字与第二个记录的关键字进行比较,若 为逆序(即 为逆序 即:a[0].key>a[1].key),则交换;然后比较第二个 ,则交换; 记录与第三个记录;依次类推,直至第n-1个记录和第 个记 个记录和第n个记 记录与第三个记录;依次类推,直至第 个记录和第 录比较为止——第一趟冒泡排序,结果关键字最大的记录被 第一趟冒泡排序, 录比较为止 第一趟冒泡排序 安置在最后一个记录上 对前n-1个记录进行第二趟冒泡排序,结果使关键字次大的 个记录进行第二趟冒泡排序, 对前 个记录进行第二趟冒泡排序 记录被安置在第n-1个记录位置 记录被安置在第 个记录位置 重复上述过程,直到“ 重复上述过程,直到“在一趟排序过程中没有进行过交换记 录的操作” 录的操作”为止
2011-11-7
福州大学数学与计算机科学学院
7
《算法与数据结构》
Algorithms and Data Structures
(2)算法描述 算法描述
• void bubble(Item a[ ], int n) • {// 冒泡排序 • for (int i = n; i > 1; i--) • for (int j = 0; j < i - 1; j++) • if (a[j] > a[j+1]) • Swap(a[j],a[j+1]); • }
∑
i =1
记录交换次数:0 记录交换次数: 若待排序记录按关键字从大到小排列(逆序 若待排序记录按关键字从大到小排列 逆序) 逆序 n −1 n ( n − 1) 关键字比较次数: 关键字比较次数: ∑ i =
i =1
2
记录交换次数: 记录交换次数: ∴ T(n)=O(n²)
2011-11-7
∑
n −1 i =1
49 38 65 97 76 49 38 65 97 76
16
(30) 13 70 85 39 42 6 30) 70 85 39 42 6
20 20
i=2 13 (13
i=8 20 (6 s i=8 20 (6 s i=8 20 (6 i=8 20 (6 i=8 20 (6
2011-11-7
13 20 30 39
福州大学数学与计算机科学学院
《算法与数据结构》
2011-11-7
福州大学数学与计算机科学学院
5
《算法与数据结构》
Algorithms and Data Structures
例:
49 38 38 49 97 76 76 13 97 13 97 27 27 30 97 30 97 初 始 关 键 字
38 49 76 13 13 27 76 27 76 30 30 76 97 第 一 趟
2011-11-7 福州大学数学与计算机科学学院 3
《算法与数据结构》
Algorithms and Data Structures
基于比较的排序算法
交换排序 冒泡排序 快速排序 插入排序 直接插入排序 二分插入排序 Shell排序 排序 选择排序 简单选择排序 堆排序 合并排序
3、 3、排序算法分类