常见算法—基本、二分、插值、和斐波那契查找

 一、基本查找

public class BasicSearchDemo1 {
    public static void main(String[] args) {
        //基本查找
        //核心:从零索引开始挨个往后查
        //需求:定义一个方法利用基本查找,查询某个元素是否存在
        //数据如下:{154,121,54,46,23,11,9}
        int[] arr={154,121,54,46,23,11,9};
        int number = 54;
        System.out.println(basicSearch(arr,number));

    }
    //参数:数组       要查找的元素
    //返回值:元素是否存在
    public static boolean basicSearch(int arr[],int number) {
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] == number) {
                return true;
            }
        }
        return false;
    }
}

二、二分查找

前提条件:数组中的数据必须是有序的

核心逻辑:每次排除一半的查找范围

public class BinarySearchDemo2 {
    public static void main(String[] args) {
        int [ ]arr={4,9,13,26,39,49,79};
        System.out.println(binarySearc(arr,13));

    }
    public static int binarySearc(int arr[],int number){
        //1.定义两个变量记录要查找的范围
        int min = 0;
        int max = arr.length - 1;
        //2.利用循环不断的去找要查找的数据
        while(true){
            if(min > max){
                return -1;
            }
            //3.找到min和max的中间位置
            int mid = (min + max) / 2;
            //4拿着mid指向的元素跟要查找的元素进行比较
            if(arr[mid]>number){
                //4.1number在mid的左边
                //min不变,max=mid -1;
                max = mid - 1;
            }else if (arr[mid]<number){
                //4.2number在mid的右边
                //max不变,min=mid+1;
                min = mid + 1;
            }else{
                //4.3number跟mid指向一样
                //找到了
                return mid;
            }


        }
    }
}

1.二分法查找的优势:提前查找效率

2.二分法查找的前提条件:数据必须是有序的。如果数据是乱的,先排序再用二分查找得到的索引没有实际意义,只能确定当前数字在数组中是否存在,因为排序后数字的位置就可能发生变化了

3.二分查找的过程:>min和max表示当前要查找的范围  >mid是在min和max中间的 >如果要查找的元素在mid的左边,缩小范围时,min不变,max等于mid减1> 如果要查找的元素在mid的右边,缩小范围时,max不变,min等于mid加1

三、插值查找

mid=min + key-arr[min]/arr[max]-arr[min]*(max-min)

四、斐波那契查找

mid=min+黄金分割点左半边长度-1

总结:

相同点:都是通过不断的缩小范围来查找对应的数据

不同点:计算mid的方式不一样

二分:mid每次都是指向范围的中间位置

插值:mid尽可能的靠近要查找的数据,但是要求数据尽可能的分布均匀

斐波那契:根据黄金分割点来计算mid指向的位置

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值