二分搜尋的非遞迴方法(java)
阿新 • • 發佈:2021-01-09
二分搜尋的非遞迴方法
所要搜尋的數值x從控制檯輸入
所要查詢的陣列從檔案讀入,第一行為陣列數字個數,第二行為陣列內數值
package com.example.twoss;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
//二分搜尋的非遞迴方法
public class FeiDiGui {
private static int n;
private static int[] a;
public static int efss( int n,int x,int a[])
{
int left=0;
int right=n-1;
while(left<=right) {
int middle=(left+right)/2;
if(x==a[middle]) {
return middle;
}
if(x>a[middle]) {
left=middle+1;
}else {
right=middle-1;
}
}
return -1;
}
public static void main(String[] args) {
// TODO 自動生成的方法存根
System.out.println( "請輸入你所希望查詢的數值:");
Scanner scanner = new Scanner(System. in );
int x=scanner.nextInt();
try {
File file=new File("./input.txt");
Scanner input = new Scanner(file);
while (input.hasNext()) {
//陣列中數字的個數
n = input.nextInt();
a = new int[n];
for(int i=0; i<n; i++) {
a[i]=input.nextInt();
}
}
} catch (FileNotFoundException e) {
// TODO 自動生成的 catch 塊
e.printStackTrace();
}
int pd = efss(n,x,a);
if(pd!=-1) {
System.out.println("該數值的陣列下標為"+pd);
}else {
System.out.println("數值"+x+"不在該陣列中");
}
}
}
附二分搜尋遞迴方法的連線:
二分搜尋的遞迴方法