java实现折半插入排序

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;//插入在合适的位置
    	}
    }
}

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值