数据结构与算法——查找算法

这篇博客详细介绍了四种常见的查找算法:线性查找、二分查找、插值查找和斐波那契查找。线性查找适用于无序数组,而二分查找、插值查找和斐波那契查找则要求数组有序。对于二分查找,文章提供了思路分析和代码实现,包括基本版本和改进版。插值查找和斐波那契查找分别采用了不同的中间点选择策略,以提高查找效率。

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

目录

一、线性查找

 二、二分查找

1.思路分析

 2.代码实现

三、插值查找

 1.代码实现

 四、斐波那契(黄金分割法)查找


常用的查找有:

顺序(线性)查找,二分查找/折半查找、插值查找、斐波那契查找

一、线性查找

        判断数列中是否包含此名称。

代码实现:

public static int seqSearch(int[] arr, int values) {
    //逐一比对,发现现有相同的值时返回下标
    for (int i = 0; i < arr.length; i++) {
        if (values == arr[i]) {
            return i;   //找到一个就返回,若一个数组中有多个等于value的值,则使用集合,将下标存入集合中
        }
    }
    return -1;
}

 二、二分查找

        在有序数组(从大到小、从小到大)中进行二分查找

1.思路分析

(有序数组为从小到大)

        1)首先确定该数组的中间下标【(left + right)/ 2】

        2)然后让需要查找的数findVal和arr[mid]比较,

                a.findVal > arr[mid],说明要查找的数在mid的右边,因此需要递归来向右重复这些步骤来查找

                b.findVal < arr[mid],说明要查找的数在mid的左边,因此需要递归来向左重复这些步骤来查找

                c.findVal = arr[mid],说明找到,则返回

结束递归

1)找到需要查找的数则退出

2)递归完所有数组,仍然没有找到findVal,则退出,即【left > right】

 2.代码实现

1)基本代码 (只找到一个)

package com.xx.search;

public class BinarySearch {
    public static void main(String[] args) {
        int[] arr = {1,2,5,8,11,45,56,98,101};   //有序数组
        int i = binarySerch(arr, 0, 7, arr.length-1);
        if(i == -1){
            System.out.println("没有找到该数!");
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值