利用二分法查找一个数字在数组中的位置

问题:有一个升序排列无重复数字的数据,以及一个数字,利用二分法查找数字在数组中的位置,找到则返回其位置号,没找到返回-1.

解答:

通过两种方式实现:第一种方式为递归实现,需要传递数组的头和尾的位置。

[java]  view plain  copy
  1. public class MidFind {  
  2.       
  3.     /** 
  4.      *  
  5.      * @param arr 
  6.      * @param key 
  7.      * @param startNum 数组位置号,为数组下标+1 
  8.      * @param endNum 数组位置号,为数组下标+1 
  9.      * @return 
  10.      */  
  11.     public static int getLocation(int[] arr,int key,int startNum,int endNum) {  
  12.         if (arr==nullreturn -1;  
  13.         int middleNum=(startNum+endNum)/2;  
  14.         System.out.println("中间值:"+middleNum);  
  15.         if (startNum
  16.             if (key==arr[middleNum]) {  
  17.                 return middleNum+1;  
  18.             } else if (key
  19.                 return getLocation(arr,key,startNum,middleNum);  
  20.             } else {  
  21.                 return getLocation(arr,key,middleNum,endNum);  
  22.             }  
  23.         } else if (startNum==endNum) {  
  24.             return startNum;  
  25.         } else {  
  26.             return -1;  
  27.         }  
  28.     }  
  29.   
  30.     /** 
  31.      * @param args 
  32.      */  
  33.     public static void main(String[] args) {  
  34.         // TODO Auto-generated method stub  
  35.         int[] arr={1,3,4,5,6,7,11,46,255,743,888};  
  36.         int temp=getLocation(arr,11,1,11);  
  37.         System.out.println(temp);  
  38.     }  
  39.   
  40. }  

第二种实现方式为非递归实现,则利用循环:
[java]  view plain  copy
  1. public class MidFind2 {  
  2.   
  3.     public static int getLocation(int[] arr,int key) {  
  4.         if (arr==nullreturn -1;  
  5.         int middleNum=arr.length/2;  
  6.         if (key==arr[middleNum]) {  
  7.             return middleNum+1;  
  8.         }  
  9.         int startNum=0//数组下标  
  10.         int endNum=arr.length-1//数组下标  
  11.         while (startNum<=endNum) {  
  12.             middleNum=(startNum+endNum)/2;  
  13.             if (key
  14.                 endNum=middleNum;  
  15.             } else if (key>arr[middleNum]) {  
  16.                 startNum=middleNum;  
  17.             } else {  
  18.                 return middleNum+1;  
  19.             }  
  20.         }  
  21.         return -1;  
  22.     }  
  23.     /** 
  24.      * @param args 
  25.      */  
  26.     public static void main(String[] args) {  
  27.         // TODO Auto-generated method stub  
  28.         int[] arr={1,3,4,5,6,7,11,46,255,743,888};  
  29.         int temp=getLocation(arr,5);  
  30.         System.out.println(temp);  
  31.     }  
  32.   
  33. }  

你可能感兴趣的:(java基础)