首页 > 代码库 > 浅谈顺序、折半查找

浅谈顺序、折半查找

线性表查找的实现原理

  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]);    }}

浅谈顺序、折半查找