二分法
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace _2分法 { class Program { static void Main(string[] args) { int[] a = { 1,3,4,5,7,9,10,25}; int destElement=10; int index = binarySearch(a, destElement); Console.WriteLine(destElement+"的下标的位置在"+index); } static int binarySearch(int[] a, int destElement) { int begin = 0; int end = a.Length - 1; while (begin <= end) { int mid = (begin + end) / 2; if (a[mid] == destElement) { return mid; }//如果中间值大于目标元素,说明目标元素在中间元素的左边 则结束下标-1 else if (a[mid] > destElement) { end = mid - 1; }//如果中间值小于目标元素,说明目标元素在中间元素的右边 则开始下标+1 else if (a[mid] < destElement) { begin = mid + 1; } } return -1; } } } /* * 二分法查找是建立在已经排序的基础之上 * 一下程序从小到大 * 这个数组没有重复的元素 * 1 3 5 9 11 13 56 * 以上是一个已经排序了的数组找出13的下标 * int begin=0; * int end=6; * int mid=(6+0)/2=3; * 中间元素是a[3]=9<13 * * 说明13在a[3]的右边则结束不变 * begin=mid+1; 开始元素下标是4 a[4]=11 * end=6 * mid=(6+4)/2=5 * 中间元素是a[5]=13 13==13 * 结果13的下标是5 * */
次程序也可以运行递归 但是能用其他的方法就尽量不要使用递归.