1. 程式人生 > 其它 >二分搜尋的遞迴方法(java)

二分搜尋的遞迴方法(java)

技術標籤:演算法演算法java

二分搜尋的遞迴方法

所要搜尋的數值x從控制檯輸入
在這裡插入圖片描述

所要查詢的陣列從檔案讀入,第一行為陣列數字個數,第二行為陣列內數值
在這裡插入圖片描述

package com.example.twoss;

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
//二分搜尋的遞迴方法
public class DiGui {
	private static int n;
	private static int[] a;
	
	public static int efss(int left,int r ,int x,int a[
]) { while(left<=r) { int middle=(left+r)/2; if(x==a[middle]) { return middle; } if(x>a[middle]) { return efss(middle+1,r,x,a); }else { return efss(left,middle-1,x,a); } } 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(0,n,x,a); if(pd!=-1) { System.out.println("該數值的陣列下標為"+pd); }else { System.out.println("數值"+x+"不在該陣列中"); } } }

附:
二分搜尋的非遞迴方法