二分法
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
*
*/
次程序也可以运行递归 但是能用其他的方法就尽量不要使用递归.

浙公网安备 33010602011771号