第三周作业——顺序查找和二分查找

/** 
 * 二分查找又称折半查找,它是一种效率较高的查找方法。  
  【二分查找要求】:1.必须采用顺序存储结构 2.必须按关键字大小有序排列。 
 * @author Administrator 
 * 
 */  
public class BinarySearch {   
    public static void main(String[] args) {  
        int[] src = new int[] {1, 3, 5, 7, 8, 9};   
        System.out.println(binarySearch(src, 3));  
        System.out.println(binarySearch(src,3,0,src.length-1));  
    }  
  
    /** 
     * * 二分查找算法 * * 
     *  
     * @param srcArray 
     *            有序数组 * 
     * @param des 
     *            查找元素 * 
     * @return des的数组下标,没找到返回-1 
     */   
   public static int binarySearch(int[] srcArray, int des){   
      
        int low = 0;   
        int high = srcArray.length-1;   
        while(low <= high) {   
            int middle = (low + high)/2;   
            if(des == srcArray[middle]) {   
                return middle;   
            }else if(des <srcArray[middle]) {   
                high = middle - 1;   
            }else {   
                low = middle + 1;   
            }  
        }  
        return -1;  
   }  
        
      /**   
     *二分查找特定整数在整型数组中的位置(递归)   
    
     */  
    public static int binarySearch(int[] dataset,int data,int beginIndex,int endIndex){    
       int midIndex = (beginIndex+endIndex)/2;    
       if(data <dataset[beginIndex]||data>dataset[endIndex]||beginIndex>endIndex){  
           return -1;    
       }  
       if(data <dataset[midIndex]){    
           return binarySearch(dataset,data,beginIndex,midIndex-1);    
       }else if(data>dataset[midIndex]){    
           return binarySearch(dataset,data,midIndex+1,endIndex);    
       }else {    
           return midIndex;    
       }    
   }   
  
}  

public class OrderSearch {  
    /**顺序查找平均时间复杂度 O(n) 
     * @param searchKey 要查找的值 
     * @param array 数组(从这个数组中查找) 
     * @return  查找结果(数组的下标位置) 
     */  
    public static int orderSearch(int searchKey,int... array){  
        for(int i=0;i<array.length;i++){  
            if(array[i]==searchKey){  
                return i;  
            }  
        }  
        return -1;  
          
    }  
    /**测试查找结果 
     * @param args 
     */  
    public static void main(String[] args) {  
          int[] test=new int[]{1,2,29,3,95,3,5,6,7,9,12};//升序序列  
          int index=OrderSearch.orderSearch(95, test);  
          System.out.println("查找到的位置 :"+ index);    
    }  
}  


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值