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; } }
