- 1、本文档共816页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
12345126101224369.2插入类排序1、直接插入排序方法:数据r[1]到r[i-1]是有序的,r[i]到r[n]是任意次序的。将r[i]插入到r[1]到r[i-1]中并使得r[1]到r[i]有序。i从2开始到结束进行n-1次。(2)C++语言描述(数组下标从0计)voidInsertSort(intr[],intn){ inti,j; intx; for(i=1;in;i++) { x=r[i]; for(j=i-1;j=0;j--) if(r[j]x) r[j+1]=r[j]; elsebreak; r[j+1]=x; }}测试主函数#defineNUM20#includeiostream.h#includestdlib.hvoidprintarr(intr[],intn){ inti; for(i=0;in;i++) coutr[i]; coutendl;}voidInsertSort(intr[],intn){ inti,j; intx; for(i=1;in;i++) {x=r[i]; for(j=i-1;j=0;j--) if(r[j]x)r[j+1]=r[j]; elsebreak; r[j+1]=x; }}voidmain(){ intarr[NUM]; inti; srand(1);//初始化随机数发生器 for(i=0;iNUM;i++)arr[i]=rand()%100;//随机数在0到99范围内InsertSort(arr,sizeof(arr)/sizeof(int));printarr(arr,sizeof(arr)/sizeof(int));}(3)分析最坏情况是数据递减序,数据比较和移动量最大,达到O(n2)最好是数据是递增序,比较和移动最少为O(n)(4)折半插入排序由于插入第i个元素到r[1]到r[i-1]之间时,前i个数据是有序的,所以可以用折半查找确定插入位置,然后插入。voidBInsertSort(intr[],intn){inti,low,high,m;intx;intj;for(i=1;i=n-1;++i){x=r[i];low=0;high=i-1;while(low=high){m=(low+high)1;if(xr[m])high=m-1;elselow=m+1; }for(j=i-1;j=high+1;--j)r[j+1]=r[j]; r[high+1]=x;}}//BInsertSort2、shell排序希尔在1959年针对插入排序作了改进,提出了一个缩小增量排序方法。1)方法:先取一个正整数d1n,把所有相隔d1的数据作为一组,组内进行直接插入排序;然后取d2d1,重复上述分组和排序操作;直至di=1。取d3=1三趟排序:4132738484955657697例初始:4938659776132748554一趟排序:1327485544938659776二趟排序:1344838274955659776取d1=5一趟分组:4938659776132748554取d2=3二趟分组:13274855449386597762)一趟排序的方法,设间距是d插入排序主体:for(i=1;in;i
文档评论(0)