码迷,mamicode.com
首页 > 其他好文 > 详细

浅谈顺序、折半查找

时间:2017-05-11 19:43:27      阅读:114      评论:0      收藏:0      [点我收藏+]

标签:void   测试   string   bin   分享   原理   public   blog   实现   

线性表查找的实现原理

  1、线性表查找:顺序查找、折半查找。

  2、顺序查找的实现思想

    遍历全表,判断值是否相等,俗称蛮力法。

  3、折半查找

    步骤一:设置初始查找取件:left=0;right=n;

    步骤二:测试查找区间[left,right]是否存在,若不存在,则查找失败,否则

    步骤三:取中间位置mid=(left+right)/2;比较target与array[mid],有三种情况

          若target<array[mid],right=mid-1;查找在mid左半区继续进行,返回步骤二

          若target>array[mid],left=mid+1;查找在mid右半区继续进行,返回步骤二

          若target=array[mid],则查找成功,返回记录在表中的位置mid。

顺序查找的代码实现

public class SequenceList {
    //数组的蛮力查找
    public static int sequentialSearch(int [] array,int target){
        int length=array.length-1;
        while(array[length]!=target&&length>=0)
            length--;
        if(array[length]==target)
            return length;
        return -1;
    }
    
    //单链表的蛮力查找
    public static int sequetialSearchByLinkedList(Node first,int target){
        if(null==first)
            return -1;
        int count=0;
        Node p=first;
        while(p.getData()!=target){
            count++;
            p=p.getNext();
        }
        if(p.getData()==target)
            return count;
        return -1;
    }
    
}

折半查找的代码实现

 技术分享

public class SequenceList {
    public static int binarySearch(int [] array,int target){
        if(array==null||array.length<0){
            return -1;
        }
        int left=0;
        int right=array.length;
        while(left<=right){
            int mid=(left+right)/2;
            if(target>array[mid]){
                left=mid+1;
            }else if(target<array[mid]){
                right=mid-1;
            }else{
                return mid;
            }    
        }
        return -1;
    }
    
    public static int recursiveBinarySearch(int [] array,int target,int left,int right){
        if(array==null||array.length<0){
            return -1;
        }
        if(left>right){
            return -1;
        }else{
            int mid=(left+right)/2;
            if(target<array[mid]){
                return recursiveBinarySearch(array, target, left, mid-1);
            }else if(target>array[mid]){
                return recursiveBinarySearch(array, target, mid+1, right);
            }else{
                return mid;
            }
        }
    }
    
    public static void main(String[] args) {
        int [] array=new int[]{7,14,18,21,23,29,31,35,38,42,46,49,52};
        
        Arrays.sort(array);
        int j=SequenceList.binarySearch(array,11);
        System.out.println(array[j]);
        
        int k=SequenceList.recursiveBinarySearch(array, 66,0,array.length);
        System.out.println(array[k]);
    }
}

浅谈顺序、折半查找

标签:void   测试   string   bin   分享   原理   public   blog   实现   

原文地址:http://www.cnblogs.com/qiuyong/p/6842134.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!