之前有学过二分查找,其实折半插入跟二分查找都是同一个原理。在百度百科开了折半排序算法的原理后,自己试着根据原理写出了版本一的算法,版本二是参照巨人的实现思想,版本二才是重点。版本一可以忽略不看。
算法同样的目的是寻找正确的插入点。
版本一:
实现思想:
第一步:获取折半后的下标
第二步:判断插入值是否小于折半处的值,如果小于,而且 小于折半处前一个值 ,则往左再次折半(为什么要小于折半处减一的值,举个列子,原有排序 1,3,5,8 需要插入的值是4,正确的插入位置是3和5之间,第一次折半点的值为5,当4小于5,大于3时就不需要再折半了。)
第三步:当大于折半值的情况,向右再次折半。
第四步:当且仅当插入值大于折半值并且小等于于折半后一个的时候,插入点为折半点+1
重复第二第三步 直至找到插入点
//折半插入排序
public static void zbcrpx(){