您的位置:首页 > 其它

折半查找

2013-05-03 11:10 387 查看
1.概念

折半查找也叫二分查找,前提是待查找的数组必须是有序的,假设数组是从小到大排列的,先将待查找的值和有序数组的中间值比较,如果相等则找到,若小于中间值则查找左半部分,若大于中间值则查找右半部分。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。
2.实现

/// <summary>

    /// 折半查找

    /// </summary>

    public class BinarySearch

    {

        /// <summary>

        /// 待查找数组

        /// </summary>

        public int[] arr { get; set; }

        /// <summary>

        /// 递归法

        /// </summary>

        public void TraservalSearch(int left,int right,int value)

        {

            if (arr == null)

            {

                Console.WriteLine("未找到");

                return;

            }

            if (left < right)

            {

                int mid = (left + right) / 2;

                if (value == arr[mid])

                {

                    Console.WriteLine("找到了" + mid);

                    return;

                }

                else if (value < arr[mid])

                {

                    TraservalSearch(left, mid - 1, value);

                }

                else

                {

                    TraservalSearch(mid + 1, right, value);

                }

            }

            else

            {

                Console.WriteLine("未找到");

            }

        }

        /// <summary>

        /// 非递归

        /// </summary>

        public void Search(int value)

        {

            if (arr == null)

            {

                Console.WriteLine("未找到");

                return;

            }

            int left = 0;

            int right = arr.Length - 1;

            while (left < right)

            {

                int mid = (left + right) / 2;

                if (arr[mid] == value)

                {

                    Console.WriteLine("找到了" + mid);

                    return;

                }

                else if (arr[mid] > value)

                {

                    right = mid - 1;

                }

                else

                {

                    left = mid + 1;

                }

            }

            Console.WriteLine("未找到");

        }

    }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息