C# 算法系列 - 折半搜索、二分查找算法、二分搜索

using System;
 
namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            /*
                ====折半搜索,也称二分查找算法、二分搜索,是一种在有序数组中查找某一特定元素的搜索算法。=====
                A 搜素过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束;
                B 如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。
                C 如果在某一步骤数组为空,则代表找不到。这种搜索算法每一次比较都使搜索范围缩小一半。
                时间复杂度折半搜索每次把搜索区域减少一半
                "科学计算器中的对数log"是以10为底的对数
                如果你要算log2(20).....以2为底的对数
                那你先换底,log2(20)=lg20/lg2
                计算器中的具体按法:"20","log","/","2","log","="  结果4.3219280948873623478703194294894
                计算器中的具体按法:"32","log","/","2","log","="  结果5
             */
            int[] y = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 };
            int loopCount = 0;
            int rr = BinarySearch(y, 0, y.Length - 1, 13, ref loopCount); //查找数并返回 若有,返回该数,没有则返回-1
            Console.Write("查找次数{0} 索引{1}", loopCount, rr);    //查找次数4 索引12
 
            Console.ReadKey();
        }
 
        /// <summary>
        /// 二分查找返回索引,不存在则返回-1
        /// </summary>
        /// <param name="arr">数组</param>
        /// <param name="startIndex">开始索引 0</param>
        /// <param name="endIndex">结束索引 </param>
        /// <param name="key">要查找的对象</param>
        /// <param name="count">查找次数</param>
        /// <returns></returns>
        public static int BinarySearch(int[] arr, int startIndex, int endIndex, int key, ref int count)
        {
            count++;
            int mid = (startIndex + endIndex) / 2;
            if (startIndex > endIndex)
                return -1;
            else
            {
                if (arr[mid] == key) //找到
                    return mid;
                else if (arr[mid] > key) //当前值大于查找值
                    return BinarySearch(arr, startIndex, mid - 1, key, ref count);
                else
                    return BinarySearch(arr, mid + 1, endIndex, key, ref count);
            }
        }
    }
}

MSCL超级工具类库
基于C#开发的超强工具类,包含数据库操作,字符串处理,文件或者文件夹处理
网络请求,缓存处理,数据容器等上百个常用工具类封装,附带调用示例和参数说明,
提供CHM详细文档,上百个生产环境使用,稳定高效,简单易用。
真正做到“工具在手,一切尽有”,让你大幅度的提高编程效率,提高编程水平。
联系QQ:7400799(请备注 "MSCL")

===============================================

重要压缩文件忘记解压密码?网上下载rar/zip/7z等压缩文件,需要密码?
====极速解密助手,支持支持RAR/ZIP/7Z等多种压缩文档解密======
★ 解密不超过24小时,跟密码复杂程度相关
★ 解密成功后再收费,无套路
★ 解密成功后自动删除原件,无后顾之忧
联系QQ:7400799(请备注 "文件解密")

==============================================

Magic.Orm已在数百个成熟项目中应用,是比较完善的ORM框架(基于C#开发)。开发过程中参考了NBear与MySoft,吸取了其中的一些精华,加入新思想,
后期参考EF的Lambda语法进行大量扩展。

为什么选择Magic.Orm?

  • 上手简单,0学习成本。使用方便,按照sql书写习惯编写C#.NET代码。功能强大。
  • 高性能,接近手写Sql。
  • 体积小(不到200kb,仅一个dll)。
  • 完美支持Sql Server(2000至最新版),MySql,Oracle,Access,Sqlite等数据库。
  • 支持大量Lambda表达式写法。
  • 不需要像NHibernate的XML配置,不需要像EF的各种数据库连接驱动,集成简单。

购买源码 请联系QQ:7400799(请备注 "ORM")

posted @ 2021-02-19 16:08  深南大道  阅读(212)  评论(0编辑  收藏  举报