深圳Java培训:5分钟了解折半插入排序
深圳Java培训:5分钟了解折半插入排序
前言
折半插入排序(Binary Insertion Sort)是对直接插入排序算法的一种改进。
插入排序思想介绍
折半插入排序与直接插入排序算法原理相同。只是,在向已排序的数据中插入数据时,采用来折半查找(二分查找)。先取已经排序的序列的中间元素,与待插入的数据进行比较,如果中间元素的值大于待插入的数据,那么待插入的数据属于数组的前半部分,否则属于后半部分。依次类推,不断缩小范围,确定要插入的位置。
算法说明:
待排序数据: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
折半插入排序的代码实现
private void binaryInsertSort(int arr[]){
int low = 0; int high = 0; int m = 0;// 中间位置 for(int i = 1; i < arr.length; i++){ low = 0; high = i-1; while(low <= high){ m = (low+high)/2; if(arr[m] > arr[i]) high = m - 1; else low = m + 1; } //统一移动元素,将待排序元素插入到指定位置 temp = arr[i]; for(int j=i; j > high+1; j--){ arr[j] = arr[j-1]; } arr[high+1] = temp; } }
总结
折半插入排序相对稳定,相对于直接插入排序,减少了比较次数;但是相对直接插入排序,移动次数不变。
- 深圳Java培训:让你真正了解Java(纯干货)
- 深圳Java培训机构哪家好?前沿教育Java培训您的首选
- 深圳Java培训:使用JS实现简单喷泉效果
- 深圳Java培训:WebService的简单使用
- 深圳Java培训:游戏中寻找学习JAVA的乐趣
- 深圳学习Java培训哪里好?前沿教育Java培训少不了
- 深圳Java培训:掌握哪些技术才能做简单的Javaweb项目
- 深圳Java培训:相伴java,感受spring
- Java程序员想年薪50W?那你必须要懂得JVM原理,来5分钟了解
- 深圳Java培训:Lock线程锁
- 深圳Java培训:Java学习中面向过程与面向对象的优缺点
- 深圳JAVA培训软件工程师名企就业班
- 深圳Java培训:Spring框架之IOC的基本配置
- 深圳Java培训:浅谈Java中的内部类
- 5分钟直观了解JAVA内存泄露
- 深圳Java培训:Javaweb现在流行用什么框架?
- 深圳Java培训:使用AOP功能和ThreadLocal类实现自定义事务管理
- 深圳UI培训:带你了解优秀的logo设计作品
- 前沿教育深圳顶尖的Java培训机构
- 前沿教育深圳较好的Java培训机构