排序算法之带二分查找的插入排序

带二分查找的插入排序要借助3个游标,low mid high来确定temp这个要插入的新元素的位置,在low<=high时循环,在mid>temp的时候就说明temp在mid的左边,即把high改成mid,因为mid此时一定大于temp,所以进行优化将high改为mid-1,反之,就将low改为mid+1.通过循环可以得到新元素的位置是high+1.将a[high+1]=temp赋值。并将[high+1,i]区间的所有元素往后移一个位置.代码实现如下:
package cn.hncu.sorts;

public class SortWay2 {
	//输出函数
	private static void print(int[] a) {
		for(int num:a){
			System.out.print(num+" ");
		}
		System.out.println();
	}
	//结合二分的插入排序
	private static void insertSort2(int[] a) {
		for (int i = 0; i < a.length-1; i++) {
			int temp=a[i+1];
			int low=0;
			int high=i;
			int mid;
			//在low和high之间的区域进行二分查找,找到新插入的元素位置
			while(low<=high){
				mid=(low+high)/2;
				if(a[mid]>temp){
					high=mid-1;
				}else{
					low=mid+1;
				}
			}
			//经过上面的二分查找,得到新元素的位置是:high+1
			//把[high+1,i]区间内的所有元素往后移一个位置
			for (int j = i; j > high; j--) {
				a[j+1]=a[j];
			}
			a[high+1]=temp;
		}
	}
	public static void main(String[] args) {
		int[] a={21,22,5,7,86,57,9,-2,37,-8};
		
		//结合二分的插入排序
		insertSort2(a);
		print(a);
	}
}

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值