在线客服
扫描二维码
下载博学谷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. }
总结
折半插入排序相对稳定,相对于直接插入排序,减少了比较次数;但是相对直接插入排序,移动次数不变。
以上就是折半插入排序的干货教程讲解,大家都弄懂了吗?
— 申请免费试学名额 —
在职想转行提升,担心学不会?根据个人情况规划学习路线,闯关式自适应学习模式保证学习效果
讲师一对一辅导,在线答疑解惑,指导就业!
相关推荐 更多
你所了解的数据库优化都有哪些?
数据库其实就是电子化的文件柜,用于储存数据,同时用户可以对数据进行增删改查等操作。在企业应用中,数据库非常重要,所以程序员在面试的时候,经常被提问关于数据库的问题。那当面试官问到你所了解的数据库优化都有哪些,你应该如何回答呢?
13558
2019-08-14 10:19:49
Java课程设计贪吃蛇讲解
Java课程设计是必不可少的一个重要学习环节,Java程序设计的目的就是加深Java学习者对Java理论基础内容的理解和掌握。今天我们要讲的Java课程设计就是贪吃蛇的小程序设计,以下是具体讲解:
7903
2019-08-30 19:22:50
Java架构师是做什么的?如何成为高薪的Java架构师?
Java架构师是做什么的?简单来说,Java架构师就是技术骨干,主要负责负责设计和搭建软件系统架构,优化现有系统的性能,带领团队不断完善开发开发方法等等。那么如何成为高薪的Java架构师? 这其实需要软硬能力都得具备,软实力大概就是需要沟通协调,带领团队的领导力;硬实力就是需要最专业技术的掌握,下面我们来详细说明一下这一点。
6075
2019-11-11 15:14:18
Java编程八大技能你还不会?
Java编程八大技能你还不会?随着大数据的快速发展,应用范围超广的Java编程语言越来越被看好。许多人包括在职程序员也兴致勃勃也报了Java编程课程,你是否也下定决心要进入Java开发呢?在大家进行Java培训学习之前,想和大家说明一个问题。Java技术的世界是多元而复杂的,需要程序员不断学习。想入行必须做好吃苦的准备。而要想作为互联网Java工程师这些基础技能必须要掌握。
5209
2020-06-12 14:31:18
Zookeeper从入门到实践要学什么?
ZooKeeper是一种分布式协调服务,它用简单的架构和API,解决了在分布式环境中协调和管理服务的难题。那么,Zookeeper从入门到实践要学什么呢?以博学谷相关的免费课程为例,课程主要讲解了包括集群结构、集群配置、常用命令、部署模式、Zab协议、Dubbo架构等重要核心知识,并结合经典售票案例与实际应用。
5894
2020-06-26 18:22:26
