常用查找算法

来源:互联网 发布:nba手环淘宝 编辑:程序博客网 时间:2024/04/30 09:34

1,顺序查找

条件:无

原理:按顺序比较每个元素,直到找到或遍历完元素为止

时间复杂度:O(n)

    private static int findSequent(int[] arr,int k){        int p = -1;        for(int i=0;i<arr.length;i++){            if(k == arr[i]){                p = i;                break;            }        }        return p;    }

2,二分(折半)查找

条件:有序数组

原理:取数组中间元素和目标值比较,如果相等则找到,如果小于目标值,则在右边找,如果小,则在左边找。找到或找完所有元素位置。

时间复杂度:O(logN)

    private static int findHalf(int[] arr,int k){        int p = -1;        int high = arr.length-1;        int low = 0;        while(low <= high){            int middle = (high + low)/2;            if(arr[middle] == k){                p = middle;                break;            }            if(arr[middle] > k){                high = middle-1;            }else if(arr[middle] < k){                low = middle+1;            }        }        return p;    }


3,二叉树查找

条件:先创建二叉排序树:

      1. 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;

      2. 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;

      3. 它的左、右子树也分别为二叉排序树。

原理:

    在二叉查找树b中查找x的过程为:

    1. 若b是空树,则搜索失败,否则:

    2. 若x等于b的根节点的数据域之值,则查找成功;否则:

    3. 若x小于b的根节点的数据域之值,则搜索左子树;否则:

    4. 查找右子树。

  时间复杂度:O(\log_2(n))


4,哈希查找

条件:先创建哈希表(散列表

原理:根据键值方式(Key value)进行查找,通过散列函数,定位数据元素。

时间复杂度:几乎是O(1),取决于产生冲突的多少。



参考

http://www.cnblogs.com/274914765qq/p/4378620.html

http://yinger-fei.iteye.com/blog/1946460


0 0