《算法与数据结构 》课程课件.ppt

  1. 1、本文档共287页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

typedefstruct{keytypekey;......}elemtype;typedefstruct{elemtype*elem;intlength;}sqlist;§10.1插入排序一、直接插入排序:直接插入排序(straightinsertionsort)是一种最简单的排序方法:将记录一个个插入到已排序好的有序表中,从而得到长度增加的新的有序表。voidstraightinsertsort(sqlistR){for(i=2;i=R.length;i++)if(R.elem[i].keyR.elem[i-1].key){R.elem[0]=R.elem[i];R.elem[i]=R.elem[i-1];for(j=i-2;R.elem[0].keyR.elem[j].key;j--)R.elem[j+1]=R.elem[j];R.elem[j+1]=R.elem[0];}}排序性能分析:比较次数:最好情况—n-1最坏情况—(n+2)(n-1)/2平均比较次数:(n+4)(n-1)/4二、折半插入排序:折半插入排序(binaryinsertionsort)与直接插入排序不同之处在于查找插入位置时不是用顺序查找,而是用折半查找。可见,直接插入排序的时间复杂度为O(n2)。但在待排序列有序的的情况下,直接插入排序的时间复杂度下降为O(n)。移动次数:最好情况—0最坏情况—(n+4)(n-1)/2平均移动次数:(n+4)(n-1)/4折半插入排序的移动次数与直接插入排序相同,只是比较次数少了,因此其时间复杂度也为O(n2)。三、2-路插入排序:2-路插入排序目的是为了减少排序过程中移动记录的次数,代价是需要n个记录的辅助空间d:将r[1]赋值给d[1],将d看成循环的,其它记录均与d[1]比较,比其小则在d[1]前插入,反之则在d[1]后插入。2-路插入排序的移动次数大约为n2/2,因此其时间复杂度仍为O(n2)。四、表插入排序:表插入排序需附设一个指针域,通过改变指针的值来达到不移动记录而得到排序结果的目的。表插入排序是用改变指针来代替移动记录操作,因此其时间复杂度还为O(n2)。表插入排序的结果是形成了链表,因此查找时只能用顺序查找,为能使用折半查找,需对记录重新排序,但这不影响其时间复杂度。五、希尔排序:希尔排序(Shell’smethod),又称为“缩小增量排序”(diminishingincrementsort),是一种比较复杂的插入排序。希尔排序的思想是:用一定的增量间隔将待排序列分成多个组,每组都采用简单插入排序;排序完一遍后,缩小增量间隔,再对新的分组采用简单插入排序;反复此过程,直至增量间隔为1,即整个待排序列为一组时,执行一遍简单插入排序后结束。12525634512214845221996187732待排序列:12532256345122148452219961877增量为7:125452322125699345618127712532256345122148452219961877增量为5:12532256345122148452219961877增量为3:1252146182187799452345321225612532256345122148452219961877增量为1:12532256345122148452219961877排序结果:3212532212568124526

文档评论(0)

清平乐 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档