• 二分查找法


    一、算法思想:

      对于一个已经排序好的序列(使用二分查找法的前提条件,在本篇文章中假设序列是升序排列的),在查找某个元素时,首先与序列中间的元素进行比较,如果大于这个元素,就在当前序列的后半部分继续查找,如果小于这个元素,就在当前序列的前半部分继续查找,直到找到相同的元素,或者所查找的序列范围为空为止。如果查到了这个元素,返回元素所在的序列的位置,如果没有查到,返回-1。

    二、程序实现:

     《二分查找学习札记》这篇博客详细讲解了二分查找法以及常见的主要问题,链接:http://www.cppblog.com/converse/archive/2009/10/05/97905.html

    三、附上JAVA版的用迭代方式和递归方式实现二分查找算法:

      

    public class BinSearch {
        public static void main(String[] args) {
            int[] array = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
            int searchNum = 8;
            //调用方法查找:
            //1、迭代方式:
            int returnNum_iteration = binarySearch_iteration(array, searchNum);
            System.out.print("迭代方式的输出结果:");
            System.out.println("要查找的元素在数组的下标:" +  returnNum_iteration);
    
            //2、递归方式:
            int returnNum_recurse = binarySearch_recurse(array, searchNum, 0, array.length - 1);
            System.out.print("递归方式的输出结果:");
            System.out.println("要查找的元素在数组的下标:" + returnNum_recurse);
        }
    
        //迭代方式实现二分查找
        public static int binarySearch_iteration(int[] array, int searchNum) {
            int low=0;
            int high=array.length-1;
            int middle=0;
            while (low <= high) {
                middle = low + (high - low) / 2;   // int middle = (low + high) / 2;
                if (searchNum == array[middle]) {
                    return middle;
                } else if (searchNum > array[middle]) {
                    low=middle+1;
                } else {
                    high=middle-1;
                }
            }
            return -1;
        }
        
    
        //递归方式实现二分查找
    
        public static int binarySearch_recurse(int[] array, int searchNum, int low, int high) {
            if (low <= high) {
                int middle = low + (high - low) / 2;   // int middle = (low + high) / 2;
                if (searchNum == array[middle]) {
                    return middle;
                } else if (searchNum > array[middle]) {
                    return binarySearch_recurse(array, searchNum, middle + 1, high);
                } else {
                    return binarySearch_recurse(array, searchNum, low, middle - 1);
                }
            }
            return -1;
        }
    
    }

    注释:

        1、什么是递归

      递归就是程序不停地间接或者直接调用自身,直到满足条件后退才出的一种算法。下面是递归实现阶乘计算的例子:

      (1)计算n的阶乘的代码:

    public long Factorial(int n) 
    { 
    if (n == 0)//限制条件,对该方法调用自己做了限制 
    return 1; 
    return n * Factorial(n - 1); 
    }

      (2)递归执行图:

                       

  • 相关阅读:
    SpringCloud学习第四篇:Feign学习(Hoxton.SR4)
    SpringCloud学习第三篇:Ribbon负载均衡(Hoxton.SR4)
    SpringCloud学习第二篇:使用Consul注册中心(Greenwich-SR1版本)
    SpringCloud学习第一篇:服务的注册与发现Eureka(Hoxton.SR4)
    SpringBoot+Mycat+APO实现读写分离
    SpringBoot+activeMq
    自动化测试适用场景和难点
    软件测试理论
    软件测试理论中的注意事项
    python自动化:monkey测试的云测
  • 原文地址:https://www.cnblogs.com/hezhiyao/p/7402005.html
Copyright © 2020-2023  润新知