• 二分法查找和普通查找


    一、普通查找

      对于数组和一个需要查找的元素来说,普通查找的原理很简单,即为从数组的第一个元素到最后一个元素进行遍历,如果第i个元素的值等于我们需要查找的值,那么返回找到的角标i,否则返回-1表示没有查找到。这里以java为例,普通查找代码如下:

    package Daily_practice;
    
    public class Array_Search {
    
        public static void main(String[] args) {
            int[] arr1 = {33,19,15,28,106,45,78,13};
            //普通查找
            int index1 = getIndex(arr1,28);
            System.out.println(index1);
        }
        //普通查找,返回值所在的角标,不存在返回-1
        public static int getIndex(int[] arr,int value)
        //value为需要查找的值
        {
            for(int i=0;i<arr.length;i++)
            {
                if(arr[i] == value)
                    return i;
            }
            return -1;
        }
    }

    二、二分法查找

      二分法是从中间元素开始查找,假设整型数组为arr,要查找的元素为value,数组中间元素为arr[mid],若value小于arr[mid],则在左半边继续查找;若value大于arr[mid],则在右半边继续查找,如此循环,知道value等于arr[mid],返回的角标mid即为要找的元素的位置。java代码如下:

    package Daily_practice;
    
    public class Array_Search1 {
    
        public static void main(String[] args) {
            int[] arr2 = {13,15,19,28,33,45,78,106};
            //二分法查找
            int index2 = halfSearch(arr2,28);
            System.out.println(index2);
        }
        
        //二分法查找
        public static int halfSearch(int[] arr,int value)
        {
            int min,mid,max;
            min = 0;
            max = arr.length-1;
            mid = (min+max)/2;
            while(arr[mid] != value)
            {
                if(value > arr[mid])
                    min = mid + 1;
                else
                    max = mid - 1;
                if(max < min)
                    return -1;
                mid = (min+max)/2;
            }
            return mid;
        }
    
    }

    三、二分法查找和普通查找的优缺点分析

      •普通查找

      优点:1)原理简单,代码容易实现

            2)不需要数组有序

      缺点:1)当元素个数很多时,效率较低

     

      •二分法查找

      优点:1)效率比普通查找高

      缺点:1)要求数组必须是有序排列

  • 相关阅读:
    Tomcat的startup.bat启动后显示乱码
    SKF密码设备研究
    《网络攻防》第十一周作业
    《网络攻防》第十周作业
    《网络攻防》第九周作业
    Maven环境搭建以及建立Maven项目
    JavaSE (unbound)的问题解决
    对任性孩子,只要做到“四个不要”就可以了
    layui中对table中的数据进行判断(0、1)转换为提示信息
    Asp.Net Core Mvc上Json序列化首字母大小写的问题
  • 原文地址:https://www.cnblogs.com/wqsbk/p/7458692.html
Copyright © 2020-2023  润新知