折半查詢(Java)
阿新 • • 發佈:2018-12-10
/*折半查詢 比方說,對於從小到大升序的陣列,只要判斷資料是否和陣列中間值相等, 如果不相等,當該資料小於陣列中間元素的值,則說明資料在中間值的左側, 因此將這組資料的區間縮小為中間值左側的區間,以此類推。直到查詢區間縮小為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+"不在陣列中"); } }