常用查找算法

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
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值