一、问题说明:
在这n个升序排列的元素中找出一特定元素x。
二、思路分析:
这个问题之所以能够使用二分法,就是因为它的检索元素是有序的,这样就可以通过每一次比较元素的结果进一步的缩小查找元素的所在的范围,从而快速确定该元素是否在该队列中。
三、代码求解:
package MyTest;
import java.util.Scanner;
/**
* 用于演示算法程序——二分搜索!
* @author YiWen Wan
*/
public class Test{
public static void main(String[] args) {
System.out.println("请输入你想查找的元素:");
Scanner scanner = new Scanner(System.in);
int data = scanner.nextInt();
scanner.close();
//进行编排数据!
int[] array = new int[10];
for (int i=0;i< array.length;i++)
array[i] = 2*i+1;
System.out.print("看看数据:");
for (int a: array
) {
System.out.print(a+ " ");
}
System.out.println("end!");
if (Search(array,data,0, array.length-1)==-1)
System.out.println("未查找到该数据!");
else
System.out.println("该数据在数组中的下标为:"+Search(array,data,0, array.length-1));
}
/**
* 用于查找元素是否在给定的数据中
* @param array:用于存放用于查找的元素
* @param data:表示用于查找的元素
* @param start:表示查找数据的起始下标
* @param end:表示查找元素的终止下标
* @return:当查找到待查找数据时,返回其下标,当找不到的时候,返回-1
*/
public static int Search(int[] array,int data,int start,int end){
if (start>end) {//表示所有的数据都找了一遍!
return -1;
}
else{
int middle = (start+end)/2;//界定中间下标
if (data>array[middle])//右边
return Search(array, data, middle+1, end);
else if (data<array[middle])//左边
return Search(array, data, start, middle-1);
else//表示找到了!
return middle;
}
}
}
四、运行结果:
Ending... ...