标签:二分 leftIndex val int midIndex 算法 查找 arrs
二分查找的两种实现方式
namespace DataStructureAndAlgorithm.Search { /// <summary> /// 二分查找算法 /// </summary> public class BinarySearch { public static void Test() { int[] arrs = { 1,3,7,23,44,55 }; int index = SearchWhile(arrs, 23); index = SearchDiGui(arrs, 0, arrs.Length - 1, 23); index = SearchWhile(arrs, 100); index = SearchDiGui(arrs, 0, arrs.Length - 1, 100); index = SearchWhile(arrs, 44); index = SearchDiGui(arrs, 0, arrs.Length - 1, 44); } /// <summary> /// 方法一:用While实现 /// </summary> /// <param name="arrs"></param> /// <param name="val"></param> /// <returns></returns> public static int SearchWhile(int [] arrs,int val) { int leftIndex = 0; int rightIndex = arrs.Length - 1; while (leftIndex <= rightIndex) { int midIndex = (leftIndex + rightIndex) / 2; int midVal = arrs[midIndex]; if (val > midVal) { //向右查找 leftIndex = midIndex + 1; } else if (val < midVal) { //向左查找 rightIndex = midIndex - 1; } else if (val == midVal) { //找到了 return midIndex; } } //没找到 return -1; } /// <summary> /// 方法二:用递归实现 /// </summary> /// <param name="arrs"></param> /// <param name="leftIndex"></param> /// <param name="rightIndex"></param> /// <param name="val"></param> /// <returns></returns> public static int SearchDiGui(int[] arrs,int leftIndex,int rightIndex,int val) { if (leftIndex > rightIndex) { //没找到 return -1; } int midIndex = (leftIndex + rightIndex) / 2; if (val == arrs[midIndex]) { //找到了 return midIndex; } else if (val > arrs[midIndex]) { //向右查找 return SearchDiGui(arrs, midIndex + 1, rightIndex, val); } else { //向左查找 return SearchDiGui(arrs, leftIndex, midIndex - 1, val); } } } }
标签:二分,leftIndex,val,int,midIndex,算法,查找,arrs 来源: https://www.cnblogs.com/huangzhen22/p/14034241.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。