插入排序优化和二分法查找的优化

博客介绍了插入交换排序,先备份要插入的数,满足条件时进行位置互换。还提到了优化方法,将比较数拿出与前面数比较,大的往后移,减少运行时间。此外,介绍了二分法查找,使用位运算节省运算,最后返回begin。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述
在比较笨的方法是插入交换排序代码为:

	protected void sort() {
		for(int begin=1;begin<Array.length;begin++) {
			int cur=begin;
			while(cur>0&&cmp(cur,cur-1)<0) {
				swap(cur,cur-1);
				cur--;
			}
		}
	}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述解读一下:这里的是先把要插的数进行备份,但此时5位置上还是有要插的数据的,这里的代码cmp(v,array[cur-1])<0,成立的条件只有位置在 4,5这种情况符合条件,此时的4上的位置的值是比5大的,其他的都是前面的比后面的大,则此时才会进入while循环,在会进行4位置与5位置互换,此时不要考虑array的大小若是个动态数组则就会自动增加,此时的的array.length就为6了,在这里的cur是为了保存原来的design的路径为了方便在下面3位置与4位置交换。
优化的是先将要比较的这个数进行拿出来,与前面的数进行比较若前面的是比较大的就让他往后面移动一位,而不是交换了。其中的上面的swap里面包含三行代码,而这里就只有一行代码了,运行时间减少了。

二分法查找的方法。

查找v在有序数组array中的位置,有则返回,没有则返回-1public class W {
	public static int indexOf(int[] array,int v) {
		if(array==null||array.length==0)return -1;
		int begin=0;
		int end =array.length;
		while(begin<end) {
			int mid=(begin+end)>>1;
		if(v<array[mid]) {
			end=mid;
		}else if(v>array[mid]) {
			begin=mid+1;
		}else {
			return mid;
		}
		}
		return -1;
	}
查找v在数组array中将要插入的位置,返回这个位置。
	public static int search(int[] array,int v) {
		if(array==null||array.length==0)return -1;
		int begin=0;
		int end=array.length;
		while(begin<end) {
		int mid=(begin+end)>>1;
		if(v<array[mid]) {
			end=mid;
		}else {
			begin=mid+1;
		}
		}
		return begin;
	}

在这里面用的是位运算。这样会节省运算,在这里求出来的mid为4.5的时候因为他是整形所以就是取值4,在这里我们先int end=array.length;把他等于最后一个数组最后一个数此时这里面是没有数据的。这里最后的是返回一个return begin

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值