基本常用查找算法思路及实现(C,java)

本文详细介绍了四种常见的查找算法:顺序查找、二分查找、插值查找和斐波那契查找。分别阐述了每种查找算法的思路并提供了Java和C语言的实现代码。顺序查找从头到尾遍历数组,适合小规模数据。二分查找通过不断将查找区间折半,提高了查找效率。插值查找根据目标值在数组中可能的位置自适应调整查找步长。斐波那契查找利用斐波那契数列优化了二分查找的中间位置,提升了在有序数组上的查找性能。
摘要由CSDN通过智能技术生成

一:基本常用查找算法介绍

 1、顺序(线性)查找

 2、二分查找/折半查找

 3、插值查找

 4、斐波那契查找

二:顺序(线性)查找算法

 1、顺序查找概述

  顺序(线性)查找算法就是从第一个开始,如果中途找到的话可以停止,也可以接着找后边其他数是否还有与之相等的。直到找到最后一个。
给出一个数组{1,2,3,4,5,6,7,8,9},找要找的数,就返回该数的下标。

 2、顺序查找代码实现(java)

public class test {
   
    public static void main(String[] args) {
   
        int a[] = {
   1, 2, 3, 4, 5, 6, 7, 8, 9};
        int res = seqSearch(a, 9);
        System.out.println(res);
    }

    public static int seqSearch(int a[], int value) {
   
        for (int i = 0; i < a.length; i++) {
   
            if (a[i] == value) {
   
                return i;
            }
        }
        return -1;
    }
}

结果如下:

 3、顺序查找代码实现(C)

#include <stdio.h>
int main(int argc, char *argv[])
{
   
	int seqSearch(int a[], int value,int len);
	int a[] = {
   1, 2, 3, 4, 5, 6, 7, 8, 9};
	int length=sizeof(a)/sizeof(a[0]);
	int res = seqSearch(a, 9,length);
	printf("要查找的数的下标是:%d\n",res);
	return 0;
}
int seqSearch(int a[], int value,int len){
   
	for (int i = 0; i < len; i++) {
   
            if (a[i] == value) {
   
                return i;
            }
        }
        return -1;
} 

结果如下:

三:二分查找/折半查找

 1、二分查找/折半查找思路

1、首先确定该数组的中间的下标
mid=(left+right)/2
2、然后让需要查找的数findVal和arr[mid]比较
(1)findVal>arr[mid],说明要查找的数在mid的右边,因此需要递归向右查找。
(2)findVal<arr[mid],说明要查找的数在mid的左边,因此需要递归向左查找。
(3)findVal=arr[mid],说明找到,就返回。

什么时候结束递归?
(1)找到就结束递归
(2)递归完整个数组,仍然没有找到findVal,也结束递归,当left>right就需要退出。

 2、二分查找代码实现(java)

import java.util.ArrayList;
import java.util.List;

public class test {
   
    public static void main(String[] args) {
   
        int array[] = new int[]{
   1, 2, 6, 8, 8, 9};
        List lists = binarySearch2(array, 0, array.length - 1, 8);
        System.out.println("要查找的数(" + 8 + ")的下标是:" + lists);
    }

	//找到一个相同的就停止
    public static int binarySearch(int a[], int left, int right, int findVal) {
   
        if (left > right) {
   
            return -1;
        }
        int mid = (left + right) / 2;
        int midVal = a[mid];

        if (findVal > midVal) {
    // 向右递归
            return binarySearch(a, mid + 1, right, findVal);
        } else if (findVal < midVal) {
    // 向左递归
            return binarySearch(a, left, mid - 1, findVal);
        } else {
   
            return mid;
        }
    }

    public static List binarySearch2(int a[], int left, int right, 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值