在线客服
扫描二维码
下载博学谷APP扫描二维码
关注博学谷微信公众号
相信大家都了解折半插入排序的定义,即对插入排序算法的一种改进,所谓排序算法过程,就是不断的依次将元素插入前面已排好序的序列中。本文将从插入排序思想介绍、算法说明、折半插入排序的代码实现这些方面讲解折半插入排序讲解 ,感兴趣的小伙伴就接着看下去吧!
插入排序思想介绍
折半插入排序与直接插入排序算法原理相同。只是,在向已排序的数据中插入数据时,采用来折半查找(二分查找)。先取已经排序的序列的中间元素,与待插入的数据进行比较,如果中间元素的值大于待插入的数据,那么待插入的数据属于数组的前半部分,否则属于后半部分。依次类推,不断缩小范围,确定要插入的位置。
算法说明:
待排序数据: 2 , 1 , 6 , 7 , 4
取第一个元素作为有序表,剩余的元素作为无序表
其中有序表: 2 ;无序表: 1 , 6 , 7 , 4
第一次比较,从无序表中取出第一个数 1 ,与中间值 2 比较, 1<2 , 1 插到 2 的前面,得到
有序表: 1 , 2 ;无序表: 6 , 7 , 4
第二次比较,从无序表中取出第一个数 6 ,与中间值 1 比较, 6>1 ,要放在 1 的后面,再与后半区(有序表: 2 )的中间值 2 比较, 6>2 , 6 插入到2 的后面,得到
有序表: 1 , 2 , 6 ;无序表: 7 , 4
第三次比较,从无序表中取出第一个数 7 ,与中间值 2 比较, 7>2 , 7 放在 2 后面,再与后半区(有序表: 6 )的中间值 6 比较, 7>6 , 7 放在 6 后面,得到
有序表: 1 , 2 , 6 , 7 ;无序表: 4
第四次比较,从无序表中取出第一个数 4 ,与中间值 2 比较, 4>2 , 4 放在 2 后面,再与后半区(有序表 :6,7 )的中间值 6 比较, 4<6 , 4 放在 6 前面,最终得到:
1 , 2 , 4 , 6 , 7
折半插入排序的代码实现
1.private void binaryInsertSort(int arr[]){
2.
3. int low = 0;
4. int high = 0;
5. int m = 0;// 中间位置
6. for(int i = 1; i < arr.length; i++){
7. low = 0;
8. high = i-1;
9. while(low <= high){
10. m = (low+high)/2;
11. if(arr[m] > arr[i])
12. high = m - 1;
13. else
14. low = m + 1;
15. }
16. // 统一移动元素,将待排序元素插入到指定位置
17. temp = arr[i];
18. for(int j=i; j > high+1; j--){
19. arr[j] = arr[j-1];
20. }
21. arr[high+1] = temp;
22. }
23. }
总结
折半插入排序相对稳定,相对于直接插入排序,减少了比较次数;但是相对直接插入排序,移动次数不变。
以上就是折半插入排序的干货教程讲解,大家都弄懂了吗?
— 申请免费试学名额 —
在职想转行提升,担心学不会?根据个人情况规划学习路线,闯关式自适应学习模式保证学习效果
讲师一对一辅导,在线答疑解惑,指导就业!
相关推荐 更多
Java入门基础学习之流概念
今天我们来梳理一下Java入门基础知识——流。本文将从流的定义、分类、标准的输入/输出流以及I/O流按类型分类四部分来介绍,让大家全面系统的了解流概念。感兴趣的同学就赶紧看下去吧!
5142
2019-08-14 17:51:40
Java初学者必须了解的Java基础知识
学习一门新的技术,入门阶段是最关键的。就拿Java学习而言,无论是自学还是参加培训,首先要对Java的基础知识有一定的了解。例如Java到底是什么,主要应用在那些方面,有哪些核心技术,目前市场需求如何等等。在具体学习过程中还要考虑学习路径是什么,学习方法,热门知识点等等。这里小编主要针对Java初学的小伙伴,一起了解一下入门时应该了解的Java基础知识。
23539
2019-12-13 19:00:19
为什么要使用Docher?Docher的优势分析
为什么要使用Docher?众所周知,Docher是一个开源的应用容器引擎,它的优势有资源利用更出色,秒级的启动速度,一致的运行环境,持续交付和部署,可以拓展和堆叠,便捷的自动迁移,更加低廉的成本以及自动化的管理等等。下面请看具体的优势分析:
5698
2020-02-20 15:19:40
Java学习的重点难点是什么?新手入门有哪些门槛?
对于新入行的同学而言,开始学习Java是一个非常关键的过程,很多同学因为不了解Java学习的重点难点知识,导致学习中遇到诸多的问题,甚至走了不少弯路。那Java学习中的重点难点是什么?新手入门有哪些门槛呢?
6629
2020-07-29 09:40:55
狂野架构师课程厉害吗?能学到哪些技能?
目前职场中有很多Java程序员遇到职业瓶颈,⼀直在中⼩公司,写着重复的业务代码,未参与过⼤型互联⽹项⽬,技术成⻓缓慢,发展遇到瓶颈。如⼯作2-5年的⼯程师不能满⾜企业实际要求,技术不够深⼊实际业务经验⽋缺。
5587
2022-09-29 16:51:24
热门文章
- 前端是什么
- 前端开发的工作职责
- 前端开发需要会什么?先掌握这三大核心关键技术
- 前端开发的工作方向有哪些?
- 简历加分-4步写出HR想要的简历
- 程序员如何突击面试?两大招带你拿下面试官
- 程序员面试技巧
- 架构师的厉害之处竟然是这……
- 架构师书籍推荐
- 懂了这些,才能成为架构师 查看更多
扫描二维码,了解更多信息
