折半法查找一个整数是否在数组中

在一堆无序的数据中寻找数据是困难的,但是对于已排序的数据,就会有比较快捷的方 法判断一个数据是否在其中,这里的例子使用折半法判断一个数据是否在一个数组中。折半 法的思想非常简单,对于从小到大排序的数组,只要判断数据是否和数组中间的值相等,如 果不相等,当该数据小于数组中间元素的值,就在数组的前一半数据中继续折半找,否则就 在数组的后一半数据中继续折半找,如此这般,就可以比较快地判断该数据是否在数组中。
例:能判断用户输入的一个整数是否在已知的数组中。程序效果如图
在这里插入图片描述
过程:1、先排序 2、折半法查找。

import java.util.*;
public class HalfMethod{
	public static void main(String agrs[]){
		int start=0,end,middle;
		int a[]={12,45,67,89,123,-45,67};
		int N=a.length;
		for(int i=0;i<N;i++){  //选择法排序数组
			for(int j=i+1;j<N;j++){
				if(a[j]<a[i]){
					int t=a[j];
					a[j]=a[i];
					a[i]=t;
				}
			}
		}
		Scanner scanner= new Scanner(System.in);
		System.out.println("输入整数,程序判断该整数是否在数组中");
		int number=scanner.nextInt();
		int count=0;
		end=N;
		middle=(start+end)/2;
		while(number!=a[middle]){
			if(number>a[middle])
				start=middle;
			else if(number<a[middle])
				end=middle;
			middle=(start+end)/2;
			count++;
			if(count>N/2)
				break;
		}
		if(count>N/2)
			System.out.printf("%d不在数组中。\n",number);
		else
			System.out.printf("%d在数组中。\n",number);
		
	}
}






















发布了51 篇原创文章 · 获赞 5 · 访问量 2121

猜你喜欢

转载自blog.csdn.net/weixin_44659084/article/details/104683704
今日推荐