class Program
{
    static void Main(string[] args)
    {
        int[] input = { 1,2,3,4,5,6,7,9,10};
        Console.WriteLine($"5在数组中的位置{Rank(5, input)}");
        Console.WriteLine($"1在数组中的位置{Rank(1, input)}");
        Console.WriteLine($"2在数组中的位置{Rank(2, input)}");
        Console.WriteLine($"10在数组中的位置{Rank(10, input)}");
        Console.WriteLine($"8在数组中的位置{Rank(8, input)}");
        Console.ReadKey();
    }

    /// <summary>
    /// 二分法查找元素在数组中的位置
    /// </summary>
    /// <param name="key">传入查找的元素</param>
    /// <param name="array">有序数组</param>
    /// <returns></returns>
    static int Rank(int key ,int[] array)
    {
        int start = 0;
        int end = array.Length;
        while (start <= end)
        {
            //要注意计算中间下标的算法,不能直接 middle = (end - start) / 2
            int middle = start + (end - start) / 2;
            Console.WriteLine($"middle={middle};start={start};end={end}");
            if (key > array[middle])
            {
                start = middle + 1;
            }
            else if (key < array[middle])
            {
                end = middle - 1;
            }
            else return middle;
        }
        return -1;
    }
}