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();




アイデア:開始ビット(配列の最初の要素)と終了ビット(配列の最後の要素)を定義し、中間位置mid =(start + end)/ 2で、検索する要素を次の要素と比較します。中央の位置、検索する要素が中央の位置に対応する値よりも小さい場合、end = mid -1、検索する要素が中央の位置に対応する値よりも大きい場合、start = mid + 1、対応する値が見つかった場合はループから抜け出し、そうでない場合は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