数组的冒泡排序与二分查找

前面的学习过程中学习了数组的冒泡排序和二分查找,那么现在将它整理出来,go!

冒泡排序

冒泡排序的思想是按照一定顺序如(左到右,下到上)所有相邻两个数依次比较,第一轮比较完成后,选出第一轮比较的最大值或最小值,然后排除这一轮的最大值或最小值,在进行第二次比较,依次下去,直到只有一个数,无法比较,冒泡排序完成。
如在一个数组中int[] intArray= {5,1,9,7};我们选择最大,升序。
第一次比较:
5和1比 5大 交换 1 5 9 7
5和9比 9大 不交换 1597
9和7比 9大 交换 1579
剔除这一轮确定最大值9
第二轮比较
1和5比 5大 不交换 1579
5和7比 7大 不交换 1579
剔除这一轮确定最大值7
第三轮比较
1和5比 5大 不交换 1579
剔除这一轮确定最大值5
只剩下1 不需要再比较

当数组中存在n个数需要两两比较时,我们可以知道需要比较n-1轮,如上面这个例子4个数,只需要比较三轮;每比较完成一轮后便可剔除一个数,所以第一轮比较不剔除数,第二轮比较剔除第一轮比较得到的一个最大值,假设轮数i=0开始,每轮比较的次数就为n-1-i;

//冒泡排序
		int[] intArray= {5,1,9,7};
		for(int i=0;i<intArray.length-1;i++) {  //n-1次比较  intArray.length就是n
			for(int j=0;j<intArray.length-i-1;j++) {
				if(intArray[j]>intArray[j+1]) {  //相邻两个数依次比较
					int t=intArray[j];
					intArray[j]=intArray[j+1];
					intArray[j+1]=t;	
				}
			}
		}
		for(int i=0;i<intArray.length;i++) {  //顺序打印
			System.out.println(intArray[i]);
		}

二分查找

二分查找的前提 :数据有序。
二分查找思想:所谓二分查找,其实就是获取一组有序数据的中间数据,判断其跟查询关键字的大小,如果中间数据大于关键字,则去中间数据前半段去寻找,(如果中间数据小于关键字,则取则去中间数据后半段去寻找)重新定义寻找区间以及中间数据,继续重复以上的操作,直到最后查询区间不存在或者查询到关键字的下标。

public static int halfSelect(int[] array, int k) {
		if (array == null) { // 判断传入数组是否为空
			return -1; //
		}
		if (k > array[array.length - 1] || k < array[0]) { // 判断输入k是否大于数组最大值或小于数组最小值
			return -1;
		}
		int min = 0;
		int max = array.length - 1;
		int middle = (max + min) / 2; // 取中间值
		while (k != array[middle]) { // 重新定义middle// 如果k值不等于中间值,执行while里面语句
			middle = (min + max) / 2;
			if (k < array[middle]) { // k小于中间值,max变化
				max = middle - 1;
			} else if (k > array[middle]) { // k大于中间值,min变化
				min = middle + 1;
			} else {
				return array[middle]; // k=array[middle] 返回array[middle]
			}
		}
		return -1; // 查找不到返回 -1
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值