二分查找法(递归和非递归算法)
二分查找法(递归算法)
/// <summary> /// 二分查找法(递归算法) /// 此算法的前提是arry数组为有序数组。是排好序的。 /// </summary> /// <param name="arry">在哪个数组中查找</param> /// <param name="number">要查找 的数</param> /// <param name="star">从数组的哪个坐标下始</param> /// <param name="end">到数组的哪个坐标结束</param> 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); } }
二分查找法(非递归算法)
/// <summary> /// 二分查找法(非递归算法) /// 此算法的前提是arry数组为有序数组。是排好序的。 /// </summary> /// <param name="arry">在哪个数组中查找</param> /// <param name="number">要查找 的数</param> 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); } }