二分法查找(折半查找)

简介: 二分法查找(折半查找)

思路:(1)先将数组内元素按从小到大顺序排好

 (2)声明两个变量,一个最小值 low:0,一个最大值 high:数组.length-1,再在循环中声明一个变量 middle:(low +high)/2

(3)判断:如果 middle = 目标元素,return middle;如果 middle > 目标元素,high=middle-1;如果 middle< 目标元素,low=middle+1

平均时间复杂度:O(log(n))

 

import java.util.Arrays;
//二分法查找;(折半查找)
public class BinarySearchTest {
    public static void main(String[] args) {
        int[] arr = {30,20,50,10,80,9,7,12,100,40,8};
        int searchWord =40;//所要查找的数;
        Arrays.sort(arr);
        /**二分法查找之前,一定要对数组元素先进行排序!!!*/
        System.out.println(Arrays.toString(arr));
        System.out.println(searchWord+"元素的索引:"+binarySearch(arr,searchWord));
    }
    public static int binarySearch(int[] array,int value){
        int low = 0;//low--high是查找区间,low开始位置,high结束位置;
        int high = array.length - 1;
        while(low <= high){
            int middle = (low+high) / 2;
            if(value == array[middle]){
                return middle;
            }
            if (value < array[middle]){
                high = middle-1;
            }
            if (value > array[middle]){
                low = middle + 1;
            }
        }
        return -1;//如果array数组中没有要查找的value值,则返回-1;
    }
}

 

© 著作权归作者所有

相关文章
|
8月前
|
存储 算法
03 折半查找
  折半查找又称为二分查找。它仅适用于有序的顺序表。   折半查找的基本思想:首先给定值 key 与表中中间位置的元素比较,若相等,则查找成功,返回该元素的存储位置;若不等,则所需查找的元素只能在中间元素以外的前半部分或后半部分(例如,在查找表升序排列时,若给定值 key 大于中间元素,则所查找的元素只可能在后半部分)。然后在缩小的范围内继续进行同样的查找,如此重复,知道找到位置,或确定表中没有所需要查找的元素,则查找不成功,返回查找失败的信息。  
51 0
二分法查找(非递归)
二分查找法是查找算法里面,经典又比较简单的一种。它适用于从有序的数列中进行查找(比如数字和字母等),将数列排序后再查找。 二分查找法的运行时间为对数时间O(㏒₂n),即查找到需要的目标位置最多只需要㏒₂n 步。假设从[0, 99]的队列(100 个数,即 n=100)中寻到目标数 30,则需要查找步数为㏒₂100 , 即最多需要查找 7 次( 26 < 100 < 27)。
|
算法
04查找算法:顺序查找法、二分查找法
04查找算法:顺序查找法、二分查找法
147 0
04查找算法:顺序查找法、二分查找法
|
存储 算法 PHP
查找算法:二分查找法(折半查找)
查找算法:二分查找法(折半查找)
137 0
查找算法:二分查找法(折半查找)
|
算法 Java C++
二分查找(折半查找)
二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。
166 0
二分查找(折半查找)
|
开发工具
顺序查找和二分查找的小总结
顺序查找和二分查找的小总结
【Leetcode】二分法查找
给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的target,如果目标值存在返回下标,否则返回