数据结构-各种排序算法.pptxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

9.1排序的基本概念;一、排序的定义;设含n个记录的序列为{R1,R2,…,Rn}

其相应的关键字序列为{K1,K2,…,Kn};设待排序记录序列中有关键字相等的记录,即ki=kj(ij),且在排序前Ri领先于Rj.;例如:;若整个排序过程不需要访问外存便能完成,则称此类排序问题为内部排序。;1、顺序存储:移动记录实现排序;;9.2插入类排序;有序序列r[1..i-1];实现“一趟插入排序”可分三步进行:;直接插入排序(基于顺序查找);利用“顺序查找”实现

“在r[1..i-1]中查找r[i]的插入位置”;1.从r[i-1]起向前进行顺序查找,;可以在查找的同时实现记录向后移动;;令i=2,3,…,n,可实现整个序列的排序。;实现内部排序的基本操作有两个:;对于直接插入排序:;因为r[1..i-1]是一个按关键字有序的序列,则可以利用折半查找实现在“r[1..i-1]中查找r[i]的插入位置”,如此实现的插入排序为折半插入排序。它只能减少查找的次数不能减少移动的次数,因此与查找后移同时实现的直接插入排序比较,改进不大。;;由于插入排序的效率取决于:记录的个数及记录的原始序;;将记录序列跳跃式的分成若干组,分别对每组进行插入排序,组数不断减少,最后仅剩一组。;例如:;Voidshellinsert(recordtyper[],intlength,intd)

{for(i=1+d;i=length;i++)

if(r[i].keyr[i-d].key)

{r[0]=r[i];/*是监视哨吗?*/

for(j=i-d;j0r[0].keyr[j].key;j-=d)

r[j+d]=r[j];

r[j+d]=r[0];}};希尔排序的时间复杂度分析是一个数学上尚未解决的难题。增量序列d[1..t]的设计至关重要,目前没有统一定论,以经验为主。

逆转数:对于待排序序列中的某个记录的关键字,它的逆转数是指在它之前比此关键字大的关键字的个数。

直接插入排序:一次移动只能减少一个逆序数。逆转数之和就是排序所需要移动的记录的次数。

希尔排序:一次移动后减少的逆转数不止一个。

希尔排序的时间复杂度为O(n1.5).;;9.3交换类排序法;假设在排序过程中,记录序列r[1..n]的状态为:;算法一:;算法二:;5;最好的情况(关键字在记录序列中顺序有序):

只需进行一趟冒泡;冒泡排序一趟之后,使最大的记录定位到最后,如果一趟之后可使某记录(任意)定位在它应处的位置(在有序序列中),而将其余的无序序列以它为枢轴,分成两部分,比它小的放在它的前面,比它大的的放在它的后面,下一趟分别对前后的子序列排序,显然可加快速度。;目标:找一个记录,以它的关键字作为“枢轴”,凡关键字小于枢轴的记录均移动至该记录之前,反之,凡关键字大于枢轴的记录均移动至该记录之后。;;可见,经过“一次划分”,将关键字序列

52,49,80,36,14,58,61,97,23,75

变为:23,49,14,36,(52)58,61,97,80,75;一趟快速排序算法;首先对无序的序列进行“一次划分”,之后分别对分割所得两个子序列“递归”进行快速排序。;voidQKsort(recordtyper[],intlow,inthigh);

/*对记录序列r[low..high]进行快速排序*/

{if(lowhigh)

{pos=QKpass(r,low,high);

/*对r[low..high]进行一趟划分,pos为枢轴*/

QKsort(r,low,pos-1);/*对低子序列递归排序*/

QKsort(r,pos+1,high);/*对高子序列递归排序*/

}};假设一次划分所得枢轴位置i=k,则对n个记录进行快速排序所需时间:;;若待排记录的初始状态为按关键字有序时,快速排序将蜕化为冒泡排序,其时间复杂度为O(n2)。;9.4选择类排序法;一、简单选择排序;简单选择排序算法;时间性能分析;二、树形选择排序;01020304

文档评论(0)

AI智博信息 + 关注
实名认证
文档贡献者

Python数据挖掘

1亿VIP精品文档

相关文档