二分查找法(递归和非递归算法)

二分查找法(递归算法)

 

        /// 
        /// 二分查找法(递归算法)
        ///  此算法的前提是arry数组为有序数组。是排好序的。
        /// 
        /// 在哪个数组中查找
        /// 要查找 的数
        /// 从数组的哪个坐标下始
        /// 到数组的哪个坐标结束
        public static int a = 0;
        public static void bingaryserch1(int[] arry, int number, int star, int end)
        {
            a++;//记录查询 的次数
            if (star > end) { Console.WriteLine("不存在此数。共查询了{0}次", a); return; }
            int middle = Convert.ToInt32((star + end) / 2);
            if (number == arry[middle]) { Console.WriteLine("存在此数,其下标为:{0}共查询了{1}次", middle, a); }
            else if (number < arry[middle]) { bingaryserch1(arry, number, star, middle - 1); }
            else if (number > arry[middle]) { bingaryserch1(arry, number, middle + 1, end); }
        }

 

二分查找法(非递归算法)

 

 /// 
        /// 二分查找法(非递归算法)
        /// 此算法的前提是arry数组为有序数组。是排好序的。
        /// 
        /// 在哪个数组中查找
        /// 要查找 的数
        public static void BinarySearch(int[] iArrary, int number)
        {
            int star = 0;//起下标
            int end = iArrary.Length - 1;//终下标,最后的下标,数组长度-1
            bool flag = false;
            int count = 0;//查找的次数
            while (star <= end)
            {
                count++;
                int mid = Convert.ToInt32((star + end) / 2);//取得中间的下标
                if (number == iArrary[mid])
                {
                    Console.WriteLine("存在此数,下标为:{0};共查找了{1}次。", mid, count);
                    flag = true;
                    return;
                }
                else if (number < iArrary[mid])
                {
                    end = mid - 1;
                }
                else
                {
                    star = mid + 1;
                }
            }
            if (!flag) { Console.WriteLine("不存在此数。共查找了{0}次。", count); }
        }

 

 

 

 

转载于:https://www.cnblogs.com/zhangzili/archive/2013/05/08/erfenchazhao.html

你可能感兴趣的:(二分查找法(递归和非递归算法))