折半算法的C#实现方式-递归和非递归
2015-04-19 15:22
351 查看
这个算法,相信大家都懂,但是不真正的手动写一遍,总觉得不得劲。这不,手动写一遍就是有不一样的效果出现了。
往左折半,还是往右走比较简单,其实这两个算法最关键的是:退出条件 min > max 和下次折半时下标或上标位置要+1或-1
往左折半,还是往右走比较简单,其实这两个算法最关键的是:退出条件 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#实现(递归和非递归)快速排序和简单排序
- 二叉树的三种遍历方式(递归和非递归的实现方法)
- C#实现(递归和非递归)快速排序和简单排序等一系列排序算法
- 二叉树的三种遍历方式的递归实现和非递归实现
- C#实现(递归和非递归)快速排序和简单排序等一系列排序算法
- 递归和非递归两种方式实现二分法查找(java)
- 面试题20:顺时针打印矩阵递归和非递归两种方式实现
- C#实现(递归和非递归)快速排序和简单排序
- 【python中二叉树的实现】python中二叉树的创建、三种方式递归遍历和非递归遍历
- 二分查找的两种实现方式(递归和非递归)--python实现
- 数据结构-二叉树的深度(递归和非递归的实现)
- 数据结构--树:二叉树的遍历方式(递归和非递归)
- 如何用栈实现递归与非递归的转换
- C#递归实现重复请求
- 二叉树的深度优先遍历(先、中、后序方式-递归和非递归)和广度优先遍历
- C#读取XML的三种实现方式
- C# 中实现快捷键的3种不同的方式
- C# Iterator迭代器的实现方式
- 【Java】实现一个递归和非递归的reverse,它们能把一个表翻转过来。