Java SE 036Javaアレイ検索方法とバイナリ検索分析

(1)人が諦めない限り、全世界があなたを諦めない
(2)私は大いに役立つために生まれる(3)
学ぶことの苦しみに耐えられないのなら、人生の苦しみに耐えなければならない。深い理解。
(4)難しいことをすることで得なければなりません
5)精神は本当の刃です。
(6)相手を2回、心の中で初めて征服します。
(7)書くのは本当に簡単ではありません。好きな場合や何か持っている場合好き+フォローまたはお気に入りを忘れないでください〜

Java SE 036Javaアレイ検索方法とバイナリ検索分析

1.配列ルックアップ

public class ArraySearchTest{
    
    
	public static int search(int [] a , int value){
    
    
		for(int i = 0 ; i < a.length ; i ++){
    
    
			if(a[i] == value){
    
    
				return i;
			}			
		}
		return -1;
	}

	public static void main(String [] args){
    
    	
		int [] a = new int[]{
    
    1,4,2};
		int value = 3;
		System.out.println(search(a,value));
	}
}

この種の検索は直接検索方法であり、効率が最も低く、なぜ非効率であるか、配列の長さが非常に長い場合、10000の場合、10000回比較する必要があります。この価格はかなりのものです。

2.バイナリ検索

(1)要件:検索する配列は順番に並んでいる必要があります。昇順と降順の両方が可能です。

(2)バイナリ検索とは、配列が順序付けられていることを前提に、配列を2つに分割し、真ん中の要素と検索対象の要素を直接比較することです。前の番号は検索する番号よりも小さいため、中央の番号より前の番号はすべて無視されます。それは確かに要件を満たしていません。次に、残りの番号の中央の番号を取得し、それを再度比較する番号と比較し、次に比較して、中央の番号の前の番号を除外します。

(3)簡単に言えば:ソートは中間になります

public class ArrayBinarySearchTest
{
    
    
	public static int binarySearch(int [] a,int value){
    
    
		int low = 0 ; //数组中第一个元素的下标
		int high = a.length - 1;//数组中最后一个元素的下标
		//取中间元素。它是我们要跟待比较那个value值进行比较的那个元素它的索引在什么地方。
		int middle;
		//什么情况下让它一直能去进行判断,只要low不大于这个high就可以一直去判断。
		while(low <= high){
    
    
			//确定中间元素,索引的位置
			middle = (low + high)/2;
			
			for(int i = 0 ; i < a.length; i++){
    
    
				System.out.print(a[i]);
				if(i == middle){
    
    
					System.out.print("#");//标记一下中间元素的位置
				}
				System.out.print("   ");
			}
			System.out.println();

			//用中间元素与value进行比较
			if(a[middle]==value){
    
    
				return middle;
			}
			//如果没找到,有两种情况,一种是小于value,一种是中间的元素大于value,如果中间的元素小于value,则中间元素以及中间元素左边的元素都不要,
			//如果是大于的话,中间元素以及中间元素右边的也都不要
			if(a[middle]<value){
    
    
				low = middle + 1;//即将中间的元素与中间元素左边的元素都过滤掉,这时对最右边元素下标没有影响,只对最左边元素下标有影响
			}

			if(a[middle]>value){
    
    
				high = middle-1;//即将中间的元素与中间元素右边的元素都过滤掉。这时对最左边元素下标没有影响,只对最右边元素下标有影响
			}
		}
		return -1;
	}
	
	public static void main(String [] args){
    
    
		int[] a = new int[]{
    
    11,22,44,992,809,928,443,222};
		//冒泡排序
		for(int i = 0 ; i < a.length-1; i++){
    
    //为何length-1,length-1就是最后一个元素的下标
			for(int j = 0 ; j < a.length-i-1; j++){
    
    
				if(a[j]>a[j+1]){
    
    
					int temp = a[j];
					a[j] = a[j+1];
					a[j+1] = temp;
				}
			}
		}

		int value = 1;

		int index = binarySearch(a,value);
		System.out.println(index);
	}
}

おすすめ

転載: blog.csdn.net/xiogjie_67/article/details/108501189