- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第7章 排序技术
2017-4-10
1.教学内容:
排序的概念、5类排序(10种方法)
2.教学目的:
⑴领会排序的基本思想和基本概念
⑵理解并掌握各种排序方法的基本思想、步骤、算法及时空效率分析
3.教学重点:
常用排序方法的基本思想、基本步骤和算法
4.教学难点:
(1)快速排序 (2)堆排序
2017-4-10
7.1 引言
问题的提出
排序是指将一组数据元素按某个数据项值的大小排列成一个有序序列的过程。
排序是计算机程序设计中经常使用的一种重要操作,是组织数据和处理数据的最基本最重要的运算之一。
排序被广泛应用于数据处理、情报检索、商业金融等许多领域。
2017-4-10
7.1 引言
1.记录、关键码和排序表
2.非递减序列、递减序列、非递增序列、递增有序
3.稳定排序和非稳定排序
4.内部排序和外部排序
5.对排序方法的评价
6. 排序表的表示
2017-4-10
7.2 插入排序
插入排序的基本思想是:每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子表的适当位置,直到全部记录插入完成,整个表有序为止。
2017-4-10
7.2.1 直接插入排序
直接插入排序是一种简单的插入排序方法,基本思想为:在R[1]至R[i-1]长度为i-1的子表已经有序的情况下,将R[i]插入,得到R[1]至R[i]长度为i 的子表有序,这样通过n-1趟(i=2..n)之后,R[1]至R[n]有序。
直接插入排序:仅有一个记录的表总是有序的,因此,对n个记录的表,可从第二个记录开始直到第n个记录,逐个向有序表中进行插入操作,从而得到n个记录按关键码有序的表。
2017-4-10
R[0] R[1] R[2] R[3] R[4] R[5] R[6] R[7] R[8] R[9] R[10]
初始序列: 36 20 18 10 60 25 30 18 12 56
i=2 : (20) 20 36 18 10 60 25 30 18 12 56
i=3 : (18) 18 20 36 10 60 25 30 18 12 56
i=4 : (10) 10 18 20 36 60 25 30 18 12 56
……
2017-4-10
2017-4-10
【性能分析:】
空间性能:仅用了一个辅助单元R[0]作为监视哨,空间复杂度为O(1)。
时间性能:向有序表中逐个插入记录的操作,进行了n?1趟,每趟操作分为比较关键码和移动记录,而比较的次数和移动记录的次数取决于初始序列的排列情况 。分三种情况讨论:
2017-4-10
(2) 最坏情况下:
最好情况下:
总比较次数= n-1次 总移动次数= 0次
(3) 平均情况下:
2017-4-10
7.2.2 折半插入排序
直接插入排序的基本操作是向有序表中插入一个记录,在直接插入排序中,插入位置的确定是通过对有序表中关键码的顺序比较得到的。
2017-4-10
2017-4-10
【时间效率】
确定插入位置所进行的折半查找,定位一个关键码的位置需要比较次数至多为 次,所以比较次数时间复杂度为O (nlog2n)。
相对直接插入排序,折半插入排序只能减少关键字间的比较次数,而移动记录的次数和直接插入排序相同,故时间复杂度仍为O(n2)。
折半插入排序是一个稳定的排序方法。
折半插入排序只适合于顺序存储的排序表。
2017-4-10
7.2.3 希尔排序
直接插入排序算法简单,特点为:在n值较小时,效率比较高,在n值很大时,若序列按关键码基本有序,效率依然较高,其时间效率可提高到O(n)。
希尔排序(Shell’s Sort)是从这两点出发,给出插入排序的改进方法。希尔排序又称缩小增量排序,是1959年由D.L.Shell提出来的。
在有序性差时尽量不
文档评论(0)