首页 > 编程语言 > 详细

折半算法的C#实现方式-递归和非递归

时间:2015-04-19 15:57:34      阅读:165      评论:0      收藏:0      [点我收藏+]

这个算法,相信大家都懂,但是不真正的手动写一遍,总觉得不得劲。这不,手动写一遍就是有不一样的效果出现了。

往左折半,还是往右走比较简单,其实这两个算法最关键的是:退出条件 min > max  和下次折半时下标或上标位置要+1或-1

/// <summary>
        /// 递归的纯算法实现
        /// </summary>
        /// <param name="arrList"></param>
        /// <param name="min"></param>
        /// <param name="max"></param>
        /// <param name="des"></param>
        /// <returns>命中目标的索引</returns>
        public int RecursionSearch(int[] arrList, int min, int max, int des)
        {
            if (min > max) return -1;
            var midIndex = (min + max) / 2;
            var midValue = arrList[midIndex];
            if (midValue == des) return midIndex;
            return midValue < des ? RecursionSearch(arrList, midIndex + 1, max, des) : RecursionSearch(arrList, min, midIndex - 1, des);
        }
        /// <summary>
        /// 普通算法纯算法实现
        /// </summary>
        /// <param name="arrList"></param>
        /// <param name="des"></param>
        /// <returns></returns>
        public int CommonSearch(int[] arrList, int des)
        {
            var min = 0;
            var max = arrList.Length - 1;
            while (min < max)
            {
                var mid = (max + min) / 2;
                var midValue = arrList[mid];
                if (midValue == des) return mid;
                if (midValue < des) min = mid + 1; //向右搜索
                if (midValue > des) max = mid - 1; //向左搜索
            }
            return -1;
        }

 

折半算法的C#实现方式-递归和非递归

原文:http://www.cnblogs.com/atwind/p/4439213.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!