二分法

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
 *  
 */

  次程序也可以运行递归 但是能用其他的方法就尽量不要使用递归.

posted @ 2013-03-21 23:37  s_p  阅读(191)  评论(0编辑  收藏  举报