java线性查找、二分查找(2015年9月23日)

本文详细介绍了两种基本的查找算法——线性查找和二分查找。通过示例代码展示了如何实现这两种查找方法,并解释了它们的工作原理及适用场景。线性查找适合于无序数组,而二分查找则要求数组事先排序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

线性查找:

定义:在一列给定的值中进行搜索,从一端开始逐一检查每个元素,直到找到所需元素的过程。
线性查找又称为顺序查找。如果查找池是某种类型的一个表,比如一个数组,简单的查找方法是从表头开始,一次将每一个值与目标元素进行比较。最后,或者查找到目标,或者达到表尾,而目标不存在于组中,这个方法称为线性查找。

import java.util.Scanner;  
  
public class SequentialSearch {  
    int a[]={49,38,65,97,76,13,27,49,78,34,12,64,5,4,62,99,98,54,56,17,18,23,34,15,35,25,53,51};  
    public SequentialSearch(){  
        System.out.println("请输入要查询的数字:");  
        Scanner input=new Scanner(System.in);  
        int input1=input.nextInt();  
        for(int i=0;i<a.length;i++){  
            if(a[i]==input1){  
                System.out.println(input1+"的位置为:"+i);  
                break;  
            }  
            if(i==a.length-1)  
                System.out.println("No Result!");  
        }  
    }   
}  

二分查找:

二分查找又称折半查找,它是一种效率较高的查找方法。

【二分查找要求】:1.必须采用顺序存储结构 2.必须按关键字大小有序排列。

所以说用折半查找时序列必须是有序的!

【算法思想】首先,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。
  重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。 

import java.util.Arrays;
public class BinarySearch {
    public int search(int[] number, int des) {   
        int low = 0;   
        int upper = number.length - 1;   
        while (low <= upper) {   
            int mid = (low + upper) / 2;   
            if (number[mid] < des)   
                low = mid + 1;   
            else if (number[mid] > des)   
                upper = mid - 1;   
            else  
                return mid;   
        }   
        return -1;   
    }   
  
    public void print(int[] array, String warn) {   
        System.out.println(warn);   
        int length = array.length;   
        for (int i = 0; i < length; i++) {   
            System.out.print(array[i] + " ");   
        }   
        System.out.println();   
    }   
  
    public static void main(String[] args) {   
        int[] array = { 1, 4, 2, 6, 7, 3, 5, 9, 8 };   
        BinarySearch find = new BinarySearch();   
        find.print(array, "数组排序前的结果:");   
        Arrays.sort(array);// Arrays中的静态方法sort()对数组排序   
        find.print(array,"数组排序后的结果:");   
        int m = find.search(array, 6);   
        if (m != -1)   
            System.out.println("\n找到6的数值的索引:" + m);   
        else  
            System.out.println("\n找不到这个数");   
    }   
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值