《数据结构与算法C#语言描述》笔记4_基础查找算法

四.基础查找算法

顺序查找(线性查找)

集合无序状态下进行顺次查找。

80-20”规则

在数据集合上80%的查找操作都是为了查找数据集合20%的数据。这样的概率分布,被称为帕累托(Pareto)分布。

自组织将最终把20%的数据集放在数据集合的开始部分,这样顺序查找可以快速找到。

自组织数据加快顺序查找

基于“80-20”法则,有两种方法实现加快查找。

        static void swap<T>(refT item1,ref T item2)

        {

            T temp = item1;

            item1 = item2;

            item2 = temp;

        }

1.位置在前20%外的目标元素和第一个元素进行位置交换

            intfindvalue=64;

            for(int i = 0; i < a.Length; i++)

            {

                if(a[i] == findvalue)

                {

                    if((double)i > (double)(a.Length* 0.2))

                    { swap<int>(ref a[i],ref a[0]); }

                }

            }

2.目标元素位置提前一个

            for(int i = 0; i < a.Length; i++)

            {

                if(a[i] == findvalue)

                {

                    if(i > 0)

                    { swap<int>(ref a[i],refa[i-1]); }

                }

            }

二叉树查找

有序排列的集合,始终判断中间点数值的大、小、等于。

递归二叉树算法

递归算法始终比迭代算法慢。

            findIndex = RecursionRbinSearch(a,37,0,a.Length-1);

 

        intRecursionRbinSearch(int[] a,int value, int lower,int upper)

        {

            if(lower > upper)

            { return-1; }

            else

            {

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

                if(a[mid] == value)

                { returnmid; }

                elseif (value < a[mid])

                { returnRecursionRbinSearch(a, value, lower, mid - 1); }

                else

                { returnRecursionRbinSearch(a, value, mid + 1, upper); }

            }

        }

 

迭代二叉树算法

Array类的内置二叉树查找方法

public staticintBinarySearch<T>(T[] array, T value);

例:

            intfindIndex = Array.BinarySearch<int>(a, 4);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值