折半插入排序
优化:寻找插入位置,从中间值开始比较
二分查找的思想:在一个有序数据集上查找一个元素,先与最中间位置的元素比较,如果比这个元素小,则在中间位置的左边,否则在右边,一直改变左右边界值,直到左边界值直到找到元素为止;
折半插入排序的思想:序列分为有序区间和无序区间,既然是有序区间,就一定可以通过折半查找的思想,找到待排序数组的第一个元素,在有序区间的位置;
public static void binarySort(int[] array){
int n=array.length;
if(n<=1){
return ;
}else{
//待排序数组
for(int i=1;i<n;i++){
int low=0,high=i-1;
int temp=array[i];
//用折半查找的方法,找到元素插入的位置
while(low<=high){
int mid=low+(high-low)/2;
if(temp<array[mid]){
high=mid-1;
}else{
low=mid+1;
}
}
int j=i-1;
//high以后的数组整体向后移一位
for(;j>=high+1;j--){
array[j+1]=array[j];
}
// 这时 j=high,插入位置就在j+1处
array[j+1]=temp;
}
}
}