/***********二分插入法,使用递归实现*******************/
/**
*
* @param num排序数组
* @param temp数组中插入到有序数列的值
* @param left
* @param right
* @return 插入位置的下标值
*/
public static int _2sort(int num[],int temp,int left,int right){
/*判断是否到达边界,当大于最大值和小于最小值时*/
if(right<=left){
return (temp<num[left])?left:left+1;
}
/*对中间值进行比较后再进行递归*/
int middle=(left+right)/2;
if(temp==num[middle]){
return middle+1;
}else if(temp>num[middle]){
return _2sort(num,temp,middle+1,right);
}else{
return _2sort(num,temp,left,middle-1);
}
}
/**
* @function 将获得的下标值插入的有序数列中
* @param num
* @param len
* @return
*/
public static int[] _2Insert(int []num,int len){
int j,temp,mid;
for(int i=1;i<len;i++){
j=i-1;
temp=num[i];
mid=_2sort(num, temp, 0, j);
/*****将获得的下标的数据之后的向后移动*****/
while(j>=mid){
num[j+1]=num[j];
j--;
}
num[++j]=temp;
}
return num;
}