二分及线性查找

这篇博客介绍了两种常见的数组查找算法——线性查找和二分查找,以及如何在数组中寻找最大值和最小值。线性查找从头到尾遍历数组,适合未排序数据;二分查找适用于已排序数组,效率更高。同时,展示了如何在Java中实现这些操作的代码示例。
摘要由CSDN通过智能技术生成

元素的查找

  • // 线性
    		// int index = -1; 
    	int a = input.nextInt();
    		for (int i=0;i<arr.length;i++){
    			if (a==arr[i]){
    				System.out.println("你输入的数字所对应的下标为:" + i);
    				break;
    			}
    			/*if (index != -1){
    				System.out.println("你输入的数字所对应的下标为:" + index);
    			}else{
    				System.out.println("-1");
    			}*/
    			if(i ==arr.length-1){
    				System.out.println("-1");
    			}
    		}
    
    • 线性查找:从数组起始位置开始,挨个元素进行等值判断,如果找到,则返回其所在的下标,否则返回-1,表示没有找到

      import java.util.Scanner;
      public class Demo04 {
      	public static void main(String[]args) {
      	//键盘输入一个数查看是否在arr数组中,如果包含,则打印下标,不存在,打印-1
      		int [] arr = {1,2,3,4,5};
      		Scanner input = new Scanner(System.in);
      		int a = input.nextInt();
      		for (int i = 0;i < arr.length;i++) {
      			if (a==arr[i]) {
      				System.out.println(i);
      				break;
      			}
      			if (i==arr.length-1) {
      				System.out.println(-1);
      			}
      		}
      	}
      }
      
    • 二分查找:首先数组元素必须是有序排列的

    • // 二分查找
      		int first = 0;
      		int middle;
      		int last =arr.length-1;
      		while(first<=last){
      			middle =(first+last) /2;
      			if(cat==arr[middle]){
      				System.out.println("你输入的数字所对应的下标为:" + middle);
      				break;
      			}else if(cat>arr[middle]){
      				first = middle+1;
      			}else{
      				last = middle-1;
      			}
      		}
      
      import java.util.Scanner;
      public class Demo04 {
      	public static void main(String[]args) {
      		//键盘输入一个数查看是否在arr数组中,如果包含,则打印下标,不存在,打印-1
      		int [] arr = {1,2,3,5,8,10,20,30};
      		Scanner input = new Scanner(System.in);
      		int a = input.nextInt();
      		int q = 0;//起始位置
      		int j = arr.length-1;//结束位置
      		int z;//中间位置
      		boolean flag = false;//标记位
      		while (q<=j) {//起始位置始终小于结束位置
      			z = (q+j)/2;//根据起始位置和结束位置得到中间位置
      			if (a==arr[z]) {//如果相等,则找到了,返回下标,修改标记位
      				System.out.println("下标为:"+z);
      				flag = true;
      				break;
      			}
      			if (a<arr[z]) {//如果要找的数小于中间值,则意味着结束位置变为上次中间位置-1
      				j=z-1;
      			}
      			if (a>arr[z]) {
      				q=z+1;
      			}
      		}
      		if (!flag) {
      			System.out.println("没有找到");
      		}
      	}
      }
      
  • 在这里插入图片描述

  • 求最值

    public class Demo04 {
    	public static void main(String[]args) {
    		int [] arr = {10,2,5,15,3,12,20,1};
    		int max = arr[0];
    		int min = arr[0];
    		for (int i = 1;i<arr.length;i++) {
    			if (arr[i]>max) {
    				max = arr[i];
    			}
    			if (arr[i]<min) {
    				min = arr[i];
    			}
    		}
    		System.out.println(max);
    		System.out.println(min);
    	}
    }
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值