C# -- 二分法查找

二分法查找:适用于已经排序好的数组

1.二分法查找(入门案例)

 1         static void Main(string[] args)
 2         {
 3             int[] myNums = { 1, 13, 22, 34, 56, 143, 167, 211, 266, 363, 466, 572, 595, 645, 688, 689, 702, 779, 888,899,922 };
 4 
 5             Console.WriteLine("我的数组是:");
 6             for (int i = 0; i < myNums.Length; i++)
 7             {
 8                 Console.Write("{0} ",myNums[i]);
 9             }
10             Console.WriteLine();
11 
12             //使用二分法从数组查找指定值
13             //取得查找值在数组中的索引位置
14             int QueryValueIndex = QueryFromTwoParts(688, myNums, 0, myNums.Length - 1);
15             Console.WriteLine("--------------------------------------------------------");
16             Console.WriteLine("查找值688在数组中的索引位置是:{0}",QueryValueIndex);
17             Console.WriteLine("数组myNums索引位置{0}处的值是:{1}",QueryValueIndex,myNums[QueryValueIndex]);
18 
19             Console.ReadKey();
20         }
21 
22 
23         //该方法返回的是查找值在数组中的索引位置
24         private static int QueryFromTwoParts(int QueryValue, int[] nums, int leftIndex, int rightIndex)
25         {
26             //计算数组中间值的在数组中的索引位置
27             int midValueIndex = (leftIndex + rightIndex + 1) / 2;
28 
29             //取得数组中间索引位置处的值
30             int midValue = nums[midValueIndex];
31 
32             //比较中间值与查找值的大小,确定下一步该怎样继续查询
33             if (QueryValue ==midValue)
34             {
35                 return midValueIndex;
36             }
37             else if (QueryValue<midValue)
38             {
39                 return QueryFromTwoParts(QueryValue, nums, leftIndex, midValueIndex);
40             }
41             else
42             {
43                 return QueryFromTwoParts(QueryValue, nums, midValueIndex, rightIndex);
44             }
45 
46         }

2.代码运行结果:

posted on 2018-10-22 10:11  在代码的世界里游走  阅读(1520)  评论(0编辑  收藏  举报