- 1、本文档共10页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
2.1直接插入排序
假设待排序的n个记录{R0,R1,…,Rn}顺序存放在数组中,直接插入法在插入记
录Ri(i=1,2,…,n-1)时,记录被划分为两个区间[R0,Ri-1]和[Ri+1,Rn-1],其中,前
一个子区间已经排好序,后一个子区间是当前未排序的部分,将关键码Ki与
Ki-1Ki-2,…,K0依次比较,找出应该插入的位置,将记录Ri插,然后将剩下的i-1
个元素按关键词大小依次插入该有序序列,没插入一个元素后依然保持该序列有序,
经过i-1趟排序后即成为有序序列。每次将一个待排序的记录,按其关键字大小插入
到前面已经排好序的子文件中的适当位置,直到全部记录插入完成为止。
2.1.2排序过程
初始数据:10325208
第一趟:[310]25208(将前两个数据排序)
第二趟:[31025]208(将25放入前面数据中的适当位置)
第三趟:[3102025]8(将20放入适当的位置)
第四趟:[38102025](将8放入适当的位置)
2.1.3时间复杂度分析
直接插入排序算法必须进行n-1趟。最好情况下,即初始序列有序,执行n-1
趟,但每一趟只比较一次,移动元素两次,总的比较次数是(n-1),移动元素次数是
2(n-1)。因此最好情况下的时间复杂度就是O(n)。最坏情况(非递增)下,最多比较
i次,因此需要的比较次数是:所以,时间复杂度为O(n)。2
2.2直接选择排序
待排序的一组数据元素中,选出最小的一个数据元素与第一个位置的数据元素交换;
然后在剩下的数据元素当中再找最小的与第二个位置的数据元素交换,循环到只剩
下最后一个数据元素为止,依次类推直到所有记录。第一趟第n个记录中找出关键
码最小的记录与第n个记录交换;第二趟,从第二个记录开始的,2-1个记录中再选
出关键码最小的记录与第二个记录交换;如此,第i趟,则从第i个记录开始的n-
i+l个记录中选出关键码最小的记录与第i个记录交换,直到所有记录排好序。
2.2.2排序过程
初始数据[4938659776132749]
第一趟排序后13[38659776492749]
各种排序算法性能比较
第二趟排序后1327[659776493849]
第三趟排序后132738[9776496549]
第四趟排序后13273849[49976576]
第五趟排序后1327384949[979776]
第六趟排序后132738494976[7697]
第七趟排序后13273849497676[97]
最后排序结果1327384949767697
2.2.3时间复杂度分析
该算法运行时间与元素的初始排列无关。不论初始排列如何,该算法都必须执
行n-1趟,每趟执行n-i-1次关键字的比较,这样总的比较次数为:所以,简单选
2
择排序的最好、最坏和平均情况的时间复杂度都为O(n)。
2.3冒泡排序
在每一趟冒泡排序中,依次比较相邻的两个关键字大小,若为反序咋交换。经过一
趟起泡后,关键词大的必须移到最后。按照这种方式进行第一趟在序列(I[0]~I[n-1])
中从前往后进行两个相邻元素的比较,若后者小,则交换,比较n-1次;第一趟排序
结束,最大元素被交换到I[n-1]中,下一趟只需在子序列(I[0]~I[n-2])中进行;如
果在某一趟排序中未交换元素,则不再进行下一趟排序。将被排序的记录数组J[1..n]
垂直排列,每个记录J[i]看作是重量为J[i].key的气泡。根据轻气泡不能在重气泡之
下的原则,从下往上扫描数组R:凡扫描到违反本原则的轻气泡,就使其向上飘浮。
如此反复进行,直到最后
文档评论(0)