查找算法

1.顺序查找算法

      算法描述:顺序比较即可。

     平均查找长度 (n+1)/2

     算法实现

static int SeqSearch(int[] arr, int sValue)

{

    for (int index = 0; index < arr.Length ; index++) 
   {
        if (arr[index] == sValue)

            return index;
   }
    return -1;
}


2.二分查找算法
    算法描述:

                        限制:待查表必须是有序的向量(在内存中连续存储)
                       首先和数组中点比较,如果等于则返回,如果小于中点则在左边区间查找,如果大于中点则在右边区间查找。

平均查找长度:lg(n+1)


算法实现

//回溯版本

public int binSearch(int value) 
{

    int upperBound, lowerBound, mid;

    upperBound = arr.Length - 1;

    lowerBound = 0;

    while (lowerBound <= upperBound)

    {

        mid = (upperBound + lowerBound) / 2;

        if (arr[mid] == value)

            return mid;

        else

            if (value < arr[mid])

                upperBound = mid - 1;

            else

                lowerBound = mid + 1;

    }

    return -1;

}


 

// 递归版本
public int RbinSearch(int value, int lower, int upper)   

{

    if (lower > upper)

        return -1;

    else 

    {

        int mid;

        mid = (int)(upper+lower) / 2;

        if (value < arr[mid])

            return RbinSearch(value, lower, mid - 1); 

        else if (value == arr[mid]) 

            return mid;

        else

            return RbinSearch(value, mid + 1, upper);

    }

}


 

// framework 内置方法,实现了二分查找,效率最高

public int Bsearh(int value) 
{

return Array.BinarySearch(arr, value);

}


 

三种方法比较,内置方法最快,回溯版本次之,递归慢。

System.Collections.SortedList System.Collections.SortedList<Tkey,Tvalue>

类用于存放键值集合,他们元素存放在线性表中,并且按照键搜索排序,其中 Sotedlist  用另个数组分表存放Key ,Value ,并巧妙地应用二分查找使得性能和Arrlist 相似。

 

3.分块查找算法
1. 基本思想
    以增加空间复杂度为代价(存储每块中的最大值已经最大值的位置),为原数组做一个索引(索引本身是递增有序的),这样先查索引,再查块内位置。如果索引的选择科学有效,则可以获得比顺序查找快的速度。

2. 算法描述
   抽取各块中的最大关键字及其起始位置构成一个索引表ID[l..b],即: ID[i](1≤i≤b)中存放第i块的最大关键字及该块在表R中的起始位置。由于表R是分块有序的,所以索引表是一个递增有序表。
   先用二分法查到元素可能所在的块起始位置,而后在块内进行顺序查找。
 
3. 平均查找长度
   平均查找长度在顺序查找和二分查找之间,并且当结点数为元素数量的平方根时,查找长度最小。

4.二叉查找
1. 基本思想
   由如何改进二分查找的缺陷(插入和删除操作需要移动大量的数据)而得出的一种算法,用二叉排序树存储数据,由于二叉树的插入和删除操作的时间复杂度相对低,而且也支持二分查找,所以在动态数据查找方面优于二分查找。

2. 算法描述
   二叉树的特点是中序遍历可以得到递增的序列。很容易可以得出在二叉排序树上进行二分排序的递归代码。

3. 平均查找长度
    和二叉排序树的形态有关。在极端情况下,二叉树只有单一的左或右分支,则查找长度为(n+1)/2;如果是平衡二叉树,则查找长度为lgn(树的层次)。



 




 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值