本帖最后由 棉/mg花/x糖 于 2013-5-26 19:15 编辑
数据结构:用数组实现二分查找算法
前提:数组中的元素必须是有序的。
程序源码如下: - package com.yb.ArrayAndString;
- import java.io.BufferedReader;
- import java.io.IOException;
- import java.io.InputStreamReader;
- class FindSearch {
- int binarySearch(int arr[],int searchValue) {
- int low = 0; //low是第一个数组元素的下标
- int high = arr.length-1; //high是最后一个数组元素的下标
- int mid = (low+high)/2; //mid是中间那个数组元素的下标
- while(low<=high && arr[mid]!=searchValue) {
- if(arr[mid] <searchValue) {
- low = mid +1; //要找的数可能在数组的后半部分中
- } else {
- high = mid -1; //要找的数可能在数组的前半部分中
- }
- mid = (low+high)/2;
- }
- if(low > high) {
- mid = -1; //mid是数组元素下标,若为-1,表示不存在要查的元素
- }
- return mid;
- }
- }
- public class BinaryFind {
- /**
- * @param args
- */
- public static void main(String[] args) throws IOException {
- // TODO Auto-generated method stub
- BufferedReader keyin = new BufferedReader(new InputStreamReader(System.in));
- int i,searchValue,mid;
- String ch;
- int arr[] = {2,4,7,18,25,34,56,68,89};
- System.out.println("打印原始数据:");
- for(i = 0; i < arr.length; i++) {
- System.out.print(" "+arr[i]);
- }
- System.out.println("\n");
- System.out.println("请输入要查找的整数:");
- ch = keyin.readLine();
- searchValue = Integer.parseInt(ch);
- FindSearch p = new FindSearch();
- mid = p.binarySearch(arr,searchValue);
- if(mid == -1) {
- System.out.println("没有找到!");
- } else {
- System.out.println("所查找的整数在数组中的位置下标是:"+mid);
- }
- }
- }
复制代码 运行结果:
|