Java常用算法——二分法查找算法

使用二分法查找的前提是:被查找的数组已排好序。



我们先用随机数生成一个数组,然后给数组排序。

		Random rand = new Random();
        int[] arr = new int[30];
        //给数组内的元素随机赋值
        for (int i = 0; i < arr.length; i++) {
    
    
            arr[i] = rand.nextInt(100);
        }
        //用Arrays类排序
        Arrays.sort(arr);
        //遍历数组
        for (int i : arr) {
    
    
            System.out.print(i+"\t");
        }
        //换行
        System.out.println();




思路:定义起始位start(数组第一个元素)和末位end(数组最后一个元素),中间位置mid=(start+end)/2,把待查找元素与中间位置的元素进行比较,如果待查找元素比中间位置对应的值小,那么end = mid -1,如果待查找元素比中间位置对应的值大,那么start = mid + 1,如果找到了对应的值,就break跳出循环,否则一直循环查找,直到start > end,证明没找到对应的值,停止循环。


代码如下:

		//随机生成一个数,在数组中用二分法查找它
		int v = rand.nextInt(100);
		//count统计查找次数
		//index为假设下标
        int begin=0,end=arr.length-1,mid,count=0,index=-1;
        while (begin<=end){
    
    
            mid = begin + (end-begin)/2; //或者mid = (begin+end)/2;
            if (v>arr[mid]){
    
    
                begin = mid+1;
                count++;
            }else if(v<arr[mid]){
    
    
                end = mid-1;
                count++;
            }else {
    
    
            	//存放该值在数组中的下标
                index = mid;
                count++;
                break;
            }
        }




完整代码如下:

import java.util.Arrays;
import java.util.Random;

public class BinarySearch {
    
    
    public static void main(String[] args) {
    
    
        Random rand = new Random();
        int[] arr = new int[30];
        for (int i = 0; i < arr.length; i++) {
    
    
            arr[i] = rand.nextInt(100);
        }
        Arrays.sort(arr);
        for (int i : arr) {
    
    
            System.out.print(i+"\t");
        }
        System.out.println();
        int v = rand.nextInt(100);
        int begin=0,end=arr.length-1,mid,count=0,index=-1;
        while (begin<=end){
    
    
            mid = begin + (end-begin)/2;
            if (v>arr[mid]){
    
    
                begin = mid+1;
                count++;
            }else if(v<arr[mid]){
    
    
                end = mid-1;
                count++;
            }else {
    
    
                index = mid;
                count++;
                break;
            }
        }
        System.out.println("一共查找了"+count+"次");
        System.out.println(v+(index!=-1 ? "存在于数组中下标为"+index:"不存在于数组中"));
    }
}

控制台输出结果为:
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_48482704/article/details/108939972
今日推荐