编程语言
首页 > 编程语言> > 20200227java学习之路之数组的二分查找法

20200227java学习之路之数组的二分查找法

作者:互联网

一:数组二分查找法

  1. 二分查找法又被称为折半查找,是一种效率较高的查找方法
  2. 二分查找法的原理:将数组分为三部分,中值(最中间的值),中值前,中值后,将要查找的值和数组的中值进行比较,若小于中值则在中值前面找,若大于中值则在中值后面找,等于中值时直接返回。

二分查找法的实例一

/*
需求一:运用二分查找法查找出在数组中{13,15,20,33,54,69,98,110};是否存在54这个数值?
思路:1)先遍历一遍数组中的数据
      2)利用角标便于记录数据的位置
      3)将数组分为三个部分,中值(mid),中值前(min),中值后(max)
      4)先用中值与要查找的那个数先进行比较,确定其位置。小于中值在前面找,反之则后面找。一次类推
      5)需进行比较哟啊用到if语句
*/
public class TestArrayDemo{
	public static void main(String[] args){
		//int [] arr={45,5,6,23,33,56,22};
		int [] arr={13,15,20,33,54,69,98,110};
		//int index=getIndex(arr,33);
		//int index=halfSearch(arr,60);
		int index=halfSearch2(arr,54);
		System.out.println("index="+index);
	}

	public static int getIndex(int [] arr,int key){
		for (int x=0;x<arr.length;x++){
			if(arr[x]==key)
			return x;
		}
			return -1;//返回值为-1时就是不需要返回,退出程序
	}

	public static int halfSearch(int [] arr,int key){
		int max=arr.length-1;
		int min=0;
		int mid=(max+min)/2;

		while(arr[mid]!=key){
			if (key>arr[mid])
				min=mid+1;
			else if(key<arr[mid])
				max=mid-1;
			if(max<mid)
				return -1;


				mid=(max+min)/2;
			
		}
		return mid;
	}


	public static int halfSearch2(int [] arr,int key){
		int max=arr.length-1;
		int min=0;
		int mid=(max+min)/2;

		while(min<=max){
				mid=(min+max)>>1;//除以2
		if(key>arr[mid])
				min=mid+1;
		else if(key<arr[mid])
			max=mid-1;
		else
			return mid;
			
		}
		return -1;//返回值为-1时就是不需要返回,退出程序
	}


}

运行结果:在第五个位置找到数据
在这里插入图片描述

二分查找法的实例二

/*需求一:运用下标查找出在数组中{13,15,20,33,54,69,98,110};70大概在哪个位置其角标为?
思路:1)将数组分为三个部分,中值(mid),中值前(min),中值后(max)
      2)先用中值与要查找的那个数先进行比较,确定其位置。小于中值在前面找,反之则后面找。一次类推
      3)需进行比较哟啊用到if语句

*/
import java.util.*;
public class TestHalfSearch{
	public static void main(String[] args){

		int [] arr={13,15,20,33,54,69,98,110};
		int index=halfSearch2(arr,70);
		System.out.println("index="+index);
		//int index1=Arrays.binarySearch(arr,54);//这是系统内有的语言可以直接运用查找位置
		//System.out.println("index="+index);//输出结果与此编码出来的结果一致
	}


	public static int halfSearch2(int [] arr,int key){
		int max=arr.length-1;
		int min=0;
		int mid=(max+min)/2;

		while(min<=max){
				mid=(min+max)>>1;//>>1意为除以2
		if(key>arr[mid])
				min=mid+1;
		else if(key<arr[mid])
			max=mid-1;
		else
			return mid;
			
		}
		return min;
	}
}

运行结果:
在这里插入图片描述

二分查找法的实例三


/*
需求;查找星期
*/
public class TestArrayWeek{
	public static void main(String[] args){
		String week=getWeek(71);
		System.out.println(week);

	}
	public static String getWeek(int num){
		if(num>7 || num<1){
			return "错误的星期";
		}
		string [] weeks={"","星期一","星期二","星期三","星期四","星期五","星期六","星期日"};
		return weeks[num];
	}
}
邹李琴 发布了11 篇原创文章 · 获赞 0 · 访问量 201 私信 关注

标签:二分,index,arr,int,查找,中值,public,20200227java
来源: https://blog.csdn.net/zlq_lq/article/details/104581799