顺序查找JAVA实现 设置哨兵

/**
 * 顺序查找,设置哨兵
 * 待查找数组:a[n]
 * 待查找元素:key
 * 
 * 方法:
 * b[n+1],其中,b[0]存放key,b[1]至b[n]存放a[0]至a[n-1]的元素
 * 将b[n]从后向前扫描,如果查找成功,返回元素在数组b中的下标,从1开始;如果查找失败,返回0
 * 
 * 设置哨兵的好处:避免了每次循环后都要检查数组下标是否越界
 * @author kpp
 *
 */
public class SequenSearch {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int data[] = {38,65,97,176,213,227,49,78,34,12,164,11,18,1};
        int key = 2;
        int index = search(data,key);
        if(index == 0){
            System.out.println("查找失败");
        }else{
            index = index - 1;
            System.out.println("查找成功,key在数组的第"+index+"个位置(从0开始)");
        }
        
    }

    /**
     * 
     * @param a    待查找数组
     * @param key  待查找元素
     * @return     如果查找成功,返回元素在数组b中的下标,从1开始;如果查找失败,返回0
     */
    private static int search(int a[],int key){
        int len = a.length;
        int b[] = new int[len+1];
        b[0] = key;
        System.arraycopy(a, 0, b, 1, len);
        
        int i = len;
        while(key != b[i]){
            i--;
        }
        return i;
    }
}

 

posted @ 2015-03-31 11:09  kpp  阅读(830)  评论(0编辑  收藏  举报