在线客服
扫描二维码
下载博学谷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将一些基本的和使用频率极高的基础类进行封装和增强后再一一个类的形式提供。集合类可以在里面保存多个对象的类,不同的集合类有不同的功能和特点。这里就和大家介绍一下再使用集合类各种容器的时候,必须注意的相关细节。
5255
2019-12-11 18:30:42
认识Dubbo基础学习笔记
今天我们要一起复习的内容是Dubbo的基础部分,包括了Dubbo的概念、认识RPC、Dubbo架构以及服务注册中心Zookeeper,如果大家想好好认识一下Dubbo,就赶紧看看下面有关Dubbo基础的学习笔记吧~
5914
2020-05-11 10:37:02
JDK和Path环境变量如何配置?
JDK和Path环境变量如何配置?安装JDK 选择安装目录 安装过程中会出现两次 安装提示 。第一次安装 jdk ,第二次安装 jre 。两个都建议安装在同一个Java文件夹中的不同文件夹中。作为一个零基础准备入门Java菜鸟来说,首先安装配置适合自己的Java环境。
5706
2020-07-14 15:12:12
成为Java架构师需要具备的基础知识有哪些?
行业中对于Java架构师的要求较高,需要掌握秒杀技术架构百万并发代理设计、动静分离架构思想、熔断限流实战、异步消息通信设计、垂直日志收集设计、秒杀冷热商品抢单实战、LVS+Nginx集群抢单百万并发实战等技术,入门学习了解可以先学习一下基础的部门。
4826
2020-11-20 14:46:09
狂野架构师学习效果好不好?互联网Java架构师前景怎么样?
博学谷狂野架构师学习效果好不好?课程怎么样?狂野架构师课程共分为16个模块,分布式篇、微服务篇、源码篇、消息篇、数据篇、性能篇、云服务篇、⼯具篇、设计篇、算法篇、⿊⻢顺⻛⻋实战项⽬、⾯试突击篇、企业级通⽤解决⽅案、企业级实战项⽬库、⼈⼯智能、数据挖掘 。从技术应⽤、原理讲解、源码剖析、项⽬实战,并且整合了⽬前多⾏业通⽤的技术解决⽅案,拿来即⽤。
5482
2022-09-29 16:42:05
