zoukankan      html  css  js  c++  java
  • 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")

  • 相关阅读:
    Spark Netty与Jetty (源码阅读十一)
    Netty服务端与客户端(源码一)
    NIO源码阅读
    Spark之SQL解析(源码阅读十)
    Spark BlockManager的通信及内存占用分析(源码阅读九)
    Spark Job的提交与task本地化分析(源码阅读八)
    Spark Shuffle数据处理过程与部分调优(源码阅读七)
    Spark常用函数(源码阅读六)
    Spark数据传输及ShuffleClient(源码阅读五)
    SparkConf加载与SparkContext创建(源码阅读四)
  • 原文地址:https://www.cnblogs.com/smartsmile/p/14416598.html
Copyright © 2011-2022 走看看