初级程序员必备查找算法 |8月更文挑战

314 阅读2分钟
作为合格的程序员,掌握基本的常用算法的重要性不言而喻;二分查找作为简单高效的查找算法,掌握其用法是非常重要的。
  • 1.二分查找是什么?
    • 二分查找是一种高效的查找算法,它通过折半比较的方式实现高效查找。二分查找的前提是在一个有序的序列的线性表中。
  • 2.二分查找的过程
    • 查找步骤:
    1. 计算出序列中间位置的索引,将目标值与索引对应的值比较
      
    2. 如果目标值与索引值相等,返回索引值
      
    3. 如果索引值小于目标值,则表明目标值在索引值的右边,则在右侧搜索
      
    4. 如果索引值大于目标值,则表明目标值在索引值的左边,则在左侧搜索
      
  • 3.二分查找的JAVA实现代码
    /**
     * @Author Ming
     * @Date 2021/8/2 14:05
     */
    public class BinarySearch {
        /**
         * 二分查找的JAVA实现
         */
        public static void main(String[] args) {
        //给定一个n个元素有序的(升序)整型数组和一个目标值
            int []num = new int[]{1,3,5,6,7,9,10};
            int findResult = 5;
            System.out.println(findAndReturnResult(num,findResult));
        }
        static Integer findAndReturnResult(int[] num, int findResult){
            //1.初始化左右指针
            //左指针默认是数组中第一个元素的下标;右指针默认是数组的最后一个元素的下标
            int left = 0,right = num.length - 1;
            //中间变量
            int tmp;
            //2.确定比较条件
            //当左指针小于或等于右指针时
            while(left <= right){
                //3.确定比较的中间位置;采用公式来计算中间值,然后赋值给中间变量
                //下面的方式就是防止当left和right太大的时候溢出
                tmp = left + (right - left) / 2;
                if(num[tmp] == findResult){
                    return tmp;
                }
                //当待比较值比目标值大的时候,缩小右指针的范围 即是right = tmp - 1;
                if(num[tmp]>findResult){
                    right = tmp - 1;
                }
                //当待比较值比目标值小的时候,增加左指针的范围 即是left = tmp + 1;
                else{
                    left = tmp + 1;
                }
            }
            return null;
        }
    
    }
    
  • 4.二分查找的图解过程
    • 下图是代码中的num数组 image.png
    • 根据代码的算法处理逻辑,首先先初始化左指针和右边指针; image.png
    • 计算中间索引值,并且比较索引对应的值与目标值 image.png
    • 遵循规则:
    1. 如果目标值与索引值相等,返回索引值
      
    2. 如果索引值小于目标值,则表明目标值在索引值的右边,则在右侧搜索 
      
    3. 如果索引值大于目标值,则表明目标值在索引值的左边,则在左侧搜索
      
    image.png image.png
    • 在第三次比较中num[2] == 5 ,退出循环返回对应索引值5; Ps:
    • 1.循环的条件是左指针小于或等于右指针
    • 2.二分查找的算法的时间复杂度为O(log2n)
  • 5.二分查找在生活中的应用
    • 二分查找算法有可能被不法分子拿来诈骗,当然程序猿学会二分查找后,就不会上当。