`
阿尔萨斯
  • 浏览: 4151903 次
社区版块
存档分类
最新评论

算法 - 折半查找(C#)

 
阅读更多
  • 递归实现:
// --------------------------------------------------------------------------------------------------------------------
// <copyright company="Chimomo's Company" file="Program.cs">
// Respect the work.
// </copyright>
// <summary>
// The binary search (recursive).
// </summary>
// --------------------------------------------------------------------------------------------------------------------

namespace CSharpLearning
{
    using System;

    /// <summary>
    /// The program.
    /// </summary>
    internal class Program
    {
        /// <summary>
        /// The binary search (recursive).
        /// 在下界为low,上界为high的有序数组a中折半查找数据元素x(递归)。
        /// </summary>
        /// <param name="a">
        /// The a.
        /// </param>
        /// <param name="x">
        /// The x.
        /// </param>
        /// <param name="low">
        /// The low.
        /// </param>
        /// <param name="high">
        /// The high.
        /// </param>
        /// <returns>
        /// The <see cref="int"/>.
        /// </returns>
        public static int BinarySearch(int[] a, int x, int low, int high)
        {
            if (low > high)
            {
                return -1;
            }

            int mid = (low + high) / 2;
            if (x == a[mid])
            {
                return mid;
            }

            return x < a[mid] ? BinarySearch(a, x, low, mid - 1) : BinarySearch(a, x, mid + 1, high);
        }

        /// <summary>
        /// Entry point into console application.
        /// </summary>
        private static void Main()
        {
            int[] a = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
            Console.WriteLine(BinarySearch(a, 6, 0, 9));
        }
    }
}

// Output:
/*
5
*/
时间复杂度:O(log2n)
  • 非递归实现:
// --------------------------------------------------------------------------------------------------------------------
// <copyright company="Chimomo's Company" file="Program.cs">
// Respect the work.
// </copyright>
// <summary>
// The binary search (not recursive).
// </summary>
// --------------------------------------------------------------------------------------------------------------------

namespace CSharpLearning
{
    using System;

    /// <summary>
    /// The program.
    /// </summary>
    internal class Program
    {
        /// <summary>
        /// The binary search (not recursive).
        /// 在长度为n的有序数组a中查找值为key的元素(非递归)。
        /// </summary>
        /// <summary>
        /// 在长度为n的数组a中查找值为key的元素。
        /// </summary>
        /// <param name="a">
        /// The a.
        /// </param>
        /// <param name="key">
        /// The key.
        /// </param>
        /// <param name="n">
        /// The n.
        /// </param>
        /// <returns>
        /// The <see cref="int"/>.
        /// </returns>
        public static int BinarySearch(int[] a, int key, int n)
        {
            int low = 0;
            int high = n - 1;
            while (low <= high)
            {
                int mid = (low + high) / 2;
                if (a[mid] == key)
                {
                    return mid;
                }

                if (a[mid] < key)
                {
                    low = mid + 1;
                }
                else
                {
                    high = mid - 1;
                }
            }

            return -1;
        }

        /// <summary>
        /// Entry point into console application.
        /// </summary>
        private static void Main()
        {
            int[] a = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
            Console.WriteLine(BinarySearch(a, 6, 9));
        }
    }
}

// Output:
/*
5
*/
时间复杂度:O(log2n)
分享到:
评论

相关推荐

    C#实现 二分查找 折半查找

    C#实现 二分查找 折半查找 visual studio 2012开发环境 具有图形化界面

    c#折半查找动态演示算法

    利用c#软件实现折半算法动态演示的实现,有具体的分析过程和算法代码

    C#基础查找算法的分析,实现

    静态查找和动态查找 内查找和外查找 顺序查找又称线性查找(Sequential Search) 二叉查找算法:二分查找又称折半查找(Binary Search)

    顺序查找表 二分查找表 折半查找表 二叉排序树 C#源代码

    顺序查找表 二分查找表 折半查找表 二叉排序树 C#源代码 注意二叉排序树只实现了查找和插入算法,使用Visual Studio 2008开发

    c# 二分查找算法

    折半搜索,也称二分查找算法、二分搜索,是一种在有序数组中查找某一特定元素的搜索算法。 A 搜素过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束; B 如果某一特定元素大于或者小于中间...

    C/C++常用算法手册.秦姣华(有详细书签).rar

    5.3.1 折半查找算法 141 5.3.2 折半查找操作示例 142 5.4 数据结构中的查找算法 145 5.4.1 顺序表结构中的查找算法 145 5.4.2 链表结构中的查找算法 148 5.4.3 树结构中的查找算法 151 5.4.4 图结构中的查找...

    学生管理系统课设

    这是本人淘宝买的,先给有需要的人,c#和access

    30.数据结构(C#语言版)高清版

    8.2.2 有序表的折半查找...........239 8.2.3 索引查找...........................242 8.3 动态查找表...................................243 8.4 哈希表...252 8.4.1 哈希表的基本概念...........252 8.4.2 常用...

    数据结构(C#语言版)

    第7、8两章分别讨论了排序和查找常用的各种方法及其应用以及在.NET框架中相应的算法。 第1章绪论................................................................................................................

    3.数据结构(C#语言版)

    第7、8两章分别讨论了排序和查找常用的各种方法及其应用以及在.NET框架中相应的算法。 第1章绪论.................................................................................................................

    数据结构(c#语言版)

    第7、8两章分别讨论了排序和查找常用的各种方法及其应用以及在.NET框架中相应的算法。 第1章绪论.................................................................................................................

    数据结构(C#语言版).

    1.2 算法...........................................................................................................................4 1.2.1算法的特性.......................................................

    数据结构(C#语言)

    1.2 算法...........................................................................................................................4 1.2.1算法的特性.....................................................

    数据结构 (C#语言版)

    1.2 算法...........................................................................................................................4 1.2.1算法的特性.......................................................

    C#数据结构

    第7、8两章分别讨论了排序和查找常用的各种方法及其应用以及在.NET框架中相应的算法。 第1章绪论................................................................................................................

Global site tag (gtag.js) - Google Analytics