折半插入排序算法

Posted 路之编程

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了折半插入排序算法相关的知识,希望对你有一定的参考价值。



“亲爱的学弟学妹们,大家好呀!今天我们继续学习插入类的第二种排序算法——折半插入排序算法,一鼓作气,再而衰,三而竭。感谢大家一直以来对本王子的认可与支持(也有可能一个人也没有,不过没事,人呐,总是后知后觉呢!)。谢谢你们的坚持,为你们的努力而点赞!”


折半插入排序算法



01.算法的基本思路

折半插入排序算法

由于插入排序实在一个有序表中进行查找和插入,因此这个“查找”可以采用折半查找方法,由此进行的插入排序称为折半插入排序。

那么问题来了。什么是折半查找呢?

折半查找的思路:设当前区间为R[low...high],首先确定该区间的中点位置mid=⌊(high+low)/2⌋;然后将待查的k值与R[mid].key比较,若相等,则查找成功并返回该位置,否则需确定新的查找区间;若R[mid].key>k,则由表的有序性可知R[mid...n-1].key均大于k,因此若表中存在关键字等于k的记录,必定是在位置mid左边的子表R[0...mid-1]中,故新的查找区间为R[0...mid-1];类似地,若R[mid].key<k,要查的k必在mid的右子表R[mid+1...n-1]中,即新的查找区间为R[mid+1...n-1]。


折半插入排序算法



02.算法的实现

/*折半查找短发的代码*/int BinSearch(SeqList R,int n,KeyType k){  int low=0,high=n-1,mid;  while(low<=high)  {    mid=(low+high)/2;    if(R[mid].key==k)    //查找成功返回      return mid;    if(R[mid].key>k)    //继续在R[low...mid-1]中查找      high=mid-1;    else               //继续在R[mid+1...high]中查找      low=mid+1;  }  return -1;}/*折半插入的代码算法*/void InsertSort(SqList R[],int n){   int i,j,low,high,mid;   SqList tmp;   for(i=1;i<n;i++)   {    tmp=R[i];    low=0;high=i-1;     while(low<=high)     {       mid=(low+high)/2;       if(tmp.key<R[mid].key)         high=mid-1;       if(tmp.key>R[mid].key)         low=mid+1;     }     for(j=i-1;j>=high+1;j--)    //元素后移       R[j+1]=R[j];     R[high+1]=tmp;   }}




03.排序方法的演示

折半插入排序算法

折半插入排序算法



04.折半插入排序例题


Created with Sketch. 点击空白框出现正确答案         答题完毕   D 正确答案是 点击空白处出现下一题 1、对有18个元素的有序表R[1...18]进行折半 查找,则查找R[3]的比较序列的下标为()。 A、1、2、3 B、9、5、2、3 C、9、5、3 D、9、4、2、3 点击空白处出现下一题 下面做法最正确的是哪一项 1、 遇到火灾不管家里的任何东西找最近 的窗户跳下去 2、家里的煮饭时突然烧起来,直接拿水将 其熄灭 3、整栋大楼着火了,为了争取时间,坐电 梯下楼最快最安全 4、火灾发生后不要留恋家中的财物,及时 的逃生,生命才是最宝贵的!另外逃出 后先向周边人求助灭火。


Created with Sketch. 线 线 线 姓名 准考证 序号 考号 线 线 线 姓名 准考证 考号 2020年小王子课堂考试试题 1 3 4 5 6 7 8 9 10 答题完毕         C 正确答案是 点击空白处出现下一题 1、对线性表进行折半查找时,要求线 性表必须 A、以顺序方式存储 B、以链式方式存储 C、以顺序方式存储,且节点按关 键字有序排序 D、以链式方式存储,且节点按关 键字有序排序 点击空白处出现下一题 1、美国最大的山是什么? A、阿尔卑斯山 C、麦金利山 B、喜马拉雅山 D、乌啦啦山



END



往期推荐



我就知道你在看!


以上是关于折半插入排序算法的主要内容,如果未能解决你的问题,请参考以下文章

实例 | Java 折半插入排序算法及解析

理解折半插入排序

排序算法:折半插入排序

Python|理解折半插入排序

折半插入排序算法

408数据结构与算法—折半插入排序(十六)