1. 程式人生 > >折半查詢(Java)

折半查詢(Java)

/*折半查詢 比方說,對於從小到大升序的陣列,只要判斷資料是否和陣列中間值相等, 如果不相等,當該資料小於陣列中間元素的值,則說明資料在中間值的左側, 因此將這組資料的區間縮小為中間值左側的區間,以此類推。直到查詢區間縮小為0還沒找到,說明要查詢的資料不在陣列中。 */

import java.util.*; //匯入java.util下面所有的類
public class Example{
	public static void main(String args[]){
	System.out.println("輸入一個整數判斷是否在已知陣列中:");
	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[i];a[i]=a[j];a[j]=t;}
		}
	}
	int start=0,middle,end;
	end=N;
	Scanner reader=new Scanner(System.in);    //輸入要查詢的資料
	int number=reader.nextInt();
	while(start<=end)    //當查詢區間為零時還沒找到,說明不再陣列中
	{
		middle=(start+end)/2;
		if(number==a[middle])
		{
			System.out.println(number+"在陣列中");
			System.exit(0);         //查詢完畢,退出程式
		}
		else if(number>a[middle])	//資料在後一半區間
			start=middle+1;   
		else if(number<a[middle])      //資料在前一半區間
			end=middle-1;	
	}
	System.out.println(number+"不在陣列中");
	}
}