查找算法(二分查找、线性查找)

本文介绍了二分查找和线性查找这两种常见的查找算法。二分查找适用于有序的线性表,效率较高,时间复杂度为O(log n),而线性查找则适合任意顺序的线性表,其时间复杂度为O(N)。
摘要由CSDN通过智能技术生成

二分查找

二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素有序排列。

  1. 查找过程
  • 此实现过程的实施是通过变量left和right控制一个循环来查找元素(其中left和right是正在查找的数据集的两个边界值)。首先,将left和right分别设置为0和arr.length-1。在循环的每次迭代过程中,将mid设置为left和right之间区域的中间值,即 mid=(left+right)/2。如果处于arr[mid]的元素比目标值小,将左索引值移动到mid后的一个元素的位置上(left=mid+1)。即下一组要搜索的区域是当前数据集的上半区。如果处于mid的元素比目标元素大,将右索引值移动到mid前一个元素的位置上( right=mid-1)。即下一组要搜索的区域是当前数据集的下半区。随着搜索的不断进行,left从左向右移,right从右向左移。一旦在mid处找到目标,查找将停止;如果没有找到目标,left和right将重合。下图显示了此过程。

在这里插入图片描述
二分查找的时间复杂度取决于查找过程中分区数可能的最大值。对于一个有n个元素的数据集来说,最多可以进行log n次分区。对于二分查找,这表示最终可能在最坏的情况下执行的检查的次数:例如,在没有找到目标时。所以二分查找的时间复杂度为O(log n)。

2. 二分查找的两种实现方式

  • 非递归法
package Arrays;
import java.util.Scanner;
public class BinarySearch2 {
   
    public static void main(String[] args) {
   
        Scanner scanner = new Scanner(System.in);
        System.out.println("输入要查找的数:");
        int value = scanner.nextInt();
        int[] arr = {
   8, 12, 23, 34, 35, 67, 87, 91, 102};
        //记录开始位置
        int left=0;
        //记录结束位置
        int right=arr.length-1;
        //记录中间位置
        int mid=(left+right
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值