网站大量收购独家精品文档,联系QQ:2885784924

binary insertion sort.ppt

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

折半插入排序 折半插入排序算法描述(左小右大)   1. 从第一个元素开始,该元素可以认为已经被排序   2. 取出下一个新元素,和查找区的中间元素比较。查找区中的所有元素均已排序。   3. 如果新元素小于中间元素,说明要插入的位置在中间元素左边,将查找区右边界左移至中间元素左边。否则将左边界右移至中间元素右边。   4. 重复步骤3,直到左边界大过右边界   5. 将新元素插入此时左边界的位置   6. 重复步骤2 void Sort(int a[],int n) { int temp; int i,j; int l,r,m; cout开始排序:endl; for(i=1;in;i++) { temp=a[i]; l=0; r=i-1; while(l=r) { m=(l+r)/2; if(tempa[m]) {r=m-1;} else {l=m+1;} } } cout把第i+1个数插入到第l+1个位置endl; for(j=i-1;j=l;j--) {a[j+1]=a[j];} a[l]=temp; for(j=0;jn;j++){couta[j]\t;} coutendl; } } void Sort(int a[],int n) //n个数排序 { int temp; int i,j; int l,r,m; //l为查找区左边界,r为查找区右边界,m为查找区中间,查找区为已排好序的数 cout开始排序:endl; for(i=1;in;i++) //i从1开始是因为第一个数a[0]可以被认为已经排好序 { temp=a[i]; //待插入数temp从a[1]到a[n- 1],每调整一次,i+1,i表示第一个未排好序的数的位置 l=0; r=i-1; while(l=r) //r从0到n-2,每调整一次,r的起始位置+1,表示此时到r为止的数都已排好序 { m=(l+r)/2; //m每次查找都位于l和r的中间 if(tempa[m]) //l从0开始,r从i-1的位置开始 { r=m-1; //如果待插入数比l和r中间的数小,就把查找区缩小到m左边,否则,缩小到m右边 } else //因为temp=a[m]时查找区下限l会移到m右边,所以同样的数出现得越晚排得越靠右 { l=m+1; } } //当l超过r时,找到temp该插入的位置l,跳出查找语句 cout把第i+1个数插入到第l+1个位置endl; for(j=i-1;j=l;j--) //把temp插到a[l]的位置,后面的数都右移一位。此时a[l]左边的数=a[l] { a[j+1]=a[j]; } a[l]=temp; for(j=0;jn;j++) //输出每次调整的结果 { couta[j]\t; } coutendl; } } * *

文档评论(0)

cj80011 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档