JAVA--二分查找

标题点:效率高
首先,数组中的元素要是升序排序的,将数组中间位置的数据与查找的数据相比较,若两者相等则查找成功,否则利用中间位置记录,将数组分成前后两个子数组,如果中间位置数据大于查找数据,则进一步查找前子数组,否则,查找后子数组
重复以上过程,若相等则查找成功,否则查无此数
流程
确定查找范围

  • 计算中间下标((最大下标+最小下标)/2)
  • 比较中间下标数据,中间数据较大,则最大下标等于中间下标-1,再重新计算中间下标
  • 比较中间下标数据,中间数据较小,则最小下标等于中间下标+1,再重新计算中间下标
  • 当最小下标大于最大下标时,说明数据不存在
public static void main(String[] args) {
		// TODO 自动生成的方法存根
		int[] nums = {1,3,9,5,6,7,15,4,8};
		int key = 6;
		for(int i=0;i<nums.length-1;i++) {    //对数组进行升序排序
			for(int j=0;j<nums.length-i-1;j++) {
				if(nums[j]>nums[j+1]) {
					int temp = nums[j];
					nums[j] = nums[j+1];
					nums[j+1] = temp;
				}
			}
		}
		System.out.print("排序后的数组为:");
		for(int i=0;i<nums.length;i++) {
			System.out.print(nums[i]+"  ");
		}
		System.out.println();
		int left = 0,right = nums.length-1;
		int mid = (left+right)/2;
		while(true) {
			if(key>nums[mid]) {
				left = mid + 1;
			}else if(key<nums[mid]) {
				right = mid - 1;
			}else {
				break;
			}
			if(left>right) {
				mid = -1;
				break;
			}
			mid = (left+right)/2;
		}
		System.out.println("位置在:"+mid);
		
	}
©️2020 CSDN 皮肤主题: 游动-白 设计师:上身试试 返回首页