java中数组的线性查找和二分查找算法

一、对数组的线性查找算法。

查找:顾名思义,是自己想要的元素在数组中寻找,看看是否在数组中。

线性查找的原理:线性查找是最基本的查找方式,它是通用自己想获得的目标元素与数组中各个元素进行比对,比对成功则找到该目标元素,反之未找到。

下面使用java语言来编写实现对数组线性查找的方法:

//定义线性查找的方法,参数为目标元素
  public static void LineSearch(int target){
	  //定义目标数组arr,并初始化
		int[] arr = new int[] {1,8,10,6,30,5,12,23};
	  //定义目标元素的下标,初始为-1
		int index=-1;
	  /*进行for循环,将数组中的元素与目标元素对比,如存在,则返回目标元素在
	   * 数组中的下标,若不存在,则返回初始下标-1
	  */
		for(int i=0; i<arr.length; i++) {
			if(arr[i]==target) {
				index = i;
				break;  //终止当前循环
			}		
		}
	  System.out.println("线性查找算法的目标元素在数组中的下标为:"+index);
 }

以上代码是实现该线性查找的方法,若目标元素在数组中,输出目标元素在数组中的下标,反之输出-1。

若要在java中运行该方法,需要在main方法中调用该方法,下面有完整代码。

二、对数组的二分查找算法。

二分查找算法的原理:首先要确保数组中的数据是有序的(默认是从小到大排序),在有序的数据中查找目标元素,与上面线性查找算法中各个比对相比,效率要快的多。一定要注意,前提是有序数据,若不是有序数据,则不能使用二分查找算法。

//定义二分查找的方法,参数为目标元素
  public static void BinarySearch(int target) {
	  //定义目标数组newArr,并初始化,注意,二分查找的前提是:一组数是按从小到大排列的
	  int[] newArr = new int[] {1,2,3,4,5,6,7,8,9};
	  //定义目标元素的下标,初始为-1
	  int index = -1;
	  //记录数组的开始位置
	  int begin = 0;
	  //记录数组的结束位置
	  int end = newArr.length-1;
	  //记录数组的中间位置
	  int mid = (begin+end)/2;
	  
	  //循环查找
	  while(true) {
  //上开始位置在结束位置之后或重合,此时还没查找到目标元素,则代表数组中没有该元素,返回-1
		  if(begin>=end) {
			  return -1;
		  }
		  //判断中间的这个元素是否是要查找的元素
		  if(newArr[mid]==target) {
			  index=mid;
			  break;
	      //中间这个元素不是要查找的元素
		  }else {
			  //如果中间这个元素比目标元素大
			  if(newArr[mid]>target) {
				  end = mid-1;   //把结束位置调整到中间位置的前一个元素
			  }else {
				  begin = mid+1; //把开始位置调整到中间位置的后一个元素
			  }
			 //确定新的中间元素
			  mid = (begin+end)/2;
		  }  
	  }
	  System.out.println("二分查找算法的目标元素的下标为:"+index);
  }

以上代码是实现该二分查找的方法,若目标元素在数组中,输出目标元素在数组中的下标,反之输出-1。

若要在java中运行该方法,需要在main方法中调用该方法,下面有完整代码。

完整代码:

public class ArraySearch{
	
//定义线性查找的方法,参数为目标元素
  public static void LineSearch(int target){
	  //定义目标数组arr,并初始化
		int[] arr = new int[] {1,8,10,6,30,5,12,23};
	  //定义目标元素的下标,初始为-1
		int index=-1;
	  /*进行for循环,将数组中的元素与目标元素对比,如存在,则返回目标元素在
	   * 数组中的下标,若不存在,则返回初始下标-1
	  */
		for(int i=0; i<arr.length; i++) {
			if(arr[i]==target) {
				index = i;
				break;  //终止当前循环
			}		
		}
	  System.out.println("线性查找算法的目标元素在数组中的下标为:"+index);
 }
  
//定义二分查找的方法,参数为目标元素
  public static void BinarySearch(int target) {
	  //定义目标数组newArr,并初始化,注意,二分查找的前提是:一组数是按从小到大排列的
	  int[] newArr = new int[] {1,2,3,4,5,6,7,8,9};
	  //定义目标元素的下标,初始为-1
	  int index = -1;
	  //记录数组的开始位置
	  int begin = 0;
	  //记录数组的结束位置
	  int end = newArr.length-1;
	  //记录数组的中间位置
	  int mid = (begin+end)/2;
	  
	  //循环查找
	  while(true) {
  //上开始位置在结束位置之后或重合,此时还没查找到目标元素,则代表数组中没有该元素,返回-1
		  if(begin>=end) {
			  return -1;
		  }
		  //判断中间的这个元素是否是要查找的元素
		  if(newArr[mid]==target) {
			  index=mid;
			  break;
	      //中间这个元素不是要查找的元素
		  }else {
			  //如果中间这个元素比目标元素大
			  if(newArr[mid]>target) {
				  end = mid-1;   //把结束位置调整到中间位置的前一个元素
			  }else {
				  begin = mid+1; //把开始位置调整到中间位置的后一个元素
			  }
			 //确定新的中间元素
			  mid = (begin+end)/2;
		  }  
	  }
	  System.out.println("二分查找算法的目标元素的下标为:"+index);
  }
  
 //在主方法中进行调用测试
public static void main(String[] args) {
			//调用线性查找函数,将参数赋为6
			LineSearch(6);	
			//调用二分查找函数,将参数赋为3
			BinarySearch(3);
	}
}

执行结果:

发布了20 篇原创文章 · 获赞 2 · 访问量 1591

猜你喜欢

转载自blog.csdn.net/weixin_42132733/article/details/105108132
今日推荐