zoukankan      html  css  js  c++  java
  • 二分法查找和普通方法查找

    一、普通查找

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

    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代码如下:

    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)要求数组必须是有序排列

  • 相关阅读:
    贪心算法过河问题 pojo1700
    大脑的合理使用
    给自己的忠言
    篮子水果模拟消费者生产者
    线程安全高效的单例模式
    Java提高篇——JVM加载class文件的原理机制
    递归的研究
    虚拟机分区方法
    使用spark dataSet 和rdd 解决 某个用户在某个地点待了多长时间
    获取数据集的好的方
  • 原文地址:https://www.cnblogs.com/jack1989/p/7808665.html
Copyright © 2011-2022 走看看