查找算法总结(一)

一、查找分类

1.根据逻辑关系可分为线性查找结构(顺序表、链表、散列表)和树形查找结构(B树、B+树、R树);

2.根据查找结构中的内容是否可变可分为静态查找结构和动态查找结构。

二、线性查找表

1.顺序查找

//查找值为o的元素的下标,顺序查找
public int indexof(T o){
    if(o=null){
        for (int i=0; i<length; i++){
            if(data[i]=null)
                return i;
    }
    else{
        for(int i=0;i<length; i++)
            if(compare(o,(T)data[i]) == 0)
                return i;
    }
    return -1;
}                
查找算法的时间复杂度最好情况是O(1),最差的情况是O(n)。


2.二分查找

前提是顺序必须有序,并且只适用于顺序存储结构,不能用链式的。因为链式的无法实现随机访问。

public int binSearch(int a[], int key){
    int low=0,high=a.length-1.mid;
    while(low<high){
        mid = (low+high)/2;
        if(a[mid] == key)    
            return mid;
        if(a[mid] <= key)
            high = mid;
       else 
            low = mid;
   }
   return -1;
}
二分法的复杂度为T(n)=O( log 2 n)


3.分块查找

分块查找的基本思想是将原表分成若干块,各块内部不一定有序,但第i块内所有记录的关键字都小于第i+1块内所有记录的关键字。抽取最大关键字及其起始位置建立索引表,因为原表是分块有序的,所以索引必定有序。

分块查找就是先用二分查询或顺序查找确定待查节点在那一块,然后在已确定的块中进行顺序查找。算法效率介于顺序查找和二分查找之间。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值