查找--二分查找

来源:互联网 发布:k3无法数据引出 编辑:程序博客网 时间:2024/06/05 20:03

   二分查找(折半查找)要求:(1)数列有序

                                         (2)数列使用顺序存储结构(比如数组)

  二分查找的递归和非递归的实现:

package com.threeTop.www;import java.util.Arrays;/** * 递归和非递归实现的二分查找 * @author wjgs * */public class BinarySearch {private int[] array;public BinarySearch(int []array){this.array=array;}/** * 递归实现的二分查找 * @param key */public int SearchRecursion(int key){if(array!=null){return searchRecursion(key,0,array.length-1);}return -1;}private int searchRecursion(int key, int start, int end) {// TODO Auto-generated method stubif(start>end){return -1;}    int mid=start+(end-start)/2;    if(array[mid]==key)    {    return mid;    }    else if(array[mid]<key)    {    return searchRecursion( key, mid+1, end);    }else    {    return searchRecursion( key, start, mid-1);    }}public void print(){for(int i=0;i<array.length;i++){System.out.print(" "+array[i]);}} /**  * 二分查找的非递归实现  * @param key  */public int search(int key){if(array==null){return -1;}int start=0;int end=array.length-1;while(start<=end){int mid =start+(end-start)/2;if(array[mid]==key){return mid;}else if(array[mid]<key){start=mid+1;}else{end=mid-1;}}return -1;}public static void main(String []args){/**int []array={5,9,1,9,5,3,7,6,1,10,4};    Arrays.sort(array);  //java库函数进行数组的排序    **/    int []array2={1 , 3, 4, 5, 6, 7 , 9, 10};    BinarySearch binarysearch=new BinarySearch(array2);    binarysearch.print();  //打印排序后的数组    System.out.println();    System.out.println(binarysearch.SearchRecursion(6));    System.out.println(binarysearch.search(6));    }}


0 0