La recherche binaire java

recherche binaire

       idée de base binaire de découverte est la suivante: les n éléments est divisé en deux parties à peu près égales, de prendre un [n / 2] x-contre, si x = a [n / 2], est de trouver x, la suspension de l'algorithme, si XA [ n / 2], aussi longtemps que la moitié droite de x dans le tableau de recherche a. méthode de recherche binaire est également connu comme une recherche binaire, qui tire pleinement parti de la relation entre l'ordre des éléments, en utilisant la stratégie sous-conquer, disponible dans le pire des cas O (log n) pour compléter la tâche de recherche. L'idée de base est :( suppose ici que les éléments de réseau sont disposés dans l'ordre croissant) sera divisé en n éléments sensiblement le même nombre de moitiés, prendre un [n / 2] x à comparer avec le regard, si x = a [n / 2] est de trouver x, l'algorithme se termine, si xa [n / 2], nous aussi longtemps que la moitié droite du tableau une recherche continue de x.

/*
 * 使用二分查找法的前提:数列是有序的,顺序存储结构 *
 * 
 * 满足条件后采用折半的方式进行判断、查找,
 * 
 * 折半数列,拿数列下标对应的元素与查找对象比较(默认数列为升序 小-->大)
 * 个人总结:先折半,再判断,
 * 
 * 
 * 
 * 
 * 
 * 
 */

public class TwoFindWay {

	public static void main(String[] args) {
		
		int[]array =new int[] {1,5,7,9,11,20,29,99};//array.length=8
		
		Boss boss =new Boss(array);
		System.out.println(boss.find(6));

		System.out.println(boss.find(1));
		System.out.println(boss.find(99));
	}

public static class Boss{
	
	
	private int[] array;
	/*
	 * 初始化数组
	 * @param array
	*/
		public Boss(int array[]) {
			
			this.array=array;	
		}

		/*
		 * 
		 * 二分查找法的实现
		 * @param find
		 * @return
		 * 		
		*/
		public int find(int fd) {
			
			if(array==null) {//空了就返回-1
				return -1;
			}
			/*
			 * 定义开始结束下标,二分位置;
			 * @param start,end,mid;
			 * 
			 * 
			 * 
			*/
			int start=0;
			
			int end =array.length-1;
			while(start<=end) {//使用while 在二分位置开始遍历,查找满足的下标元素
				
				int mid =start+(end-start)/2;
				
				if(array[mid]==fd) {
				
					return mid;//找到了满足的下标元素返回数列 下标
					
				}else if(fd<array[mid]) {
					
					end =mid-1;//折半后 如果说比数列下标元素小,就左移一位下标,
				
				}else {
					
					start=mid+1;//反之,右移一位,
				}
					
			}
			return -1;//找不到就返回0,
		}
}

	
}

Avantages: rapide,

Inconvénients: seuil d'utilisation.

Publié 14 articles originaux · louanges gagnées 0 · Vues 139

Je suppose que tu aimes

Origine blog.csdn.net/weixin_44657829/article/details/104780579
conseillé
Classement