package MySort;
public class HalfInsert {
public static void main(String[] args){
HalfInsert hi=new HalfInsert();
int[] R={49,38,65,97,76,13,27,49};
hi.halfInsert(R);
for(int i=0;i<R.length;i++){
System.out.println(R[i]);
}
}
public void halfInsert(int[] R){
for(int i=1;i<R.length;i++){//从第二个元素开始,需要做n-1趟插入排序,第一个元素自成有序区
int temp=R[i];//暂存
int low=0;//定义从第一个元素开始为有序区
int high=i-1;//有序区的元素从一个开始逐渐增加
//low和high分别指向有序区中的第一个和最后一个元素
while(low<=high){//寻找在有序区中插入的位置,最后使high<low,就找到插入的位置
//为high+1;也是low的位置
int m=(low+high)/2;//有序区的中间元素
if(temp<R[m]){//如果比中间的元素小,则插入位置在低半区
high=m-1;
}else//否则,插入位置在高半区
low=m+1;
}
for(int j=i;j>low;j--){//把从low开始以后或high+1以后的元素向后移动,插入
R[j]=R[j-1];//移动元素
}
R[low]=temp;//插入在合适的位置
}
}
}