二分查找法:
首先有三个变量,数组的头部索引(l),数组的尾部索引(r),数组的中间比较值(mid),也是索引。 现在要查找的值(targat),然后比较 mid ,小,就在 l 、mid减1的区间在进行比较,然后一直推到找到为止,或者 r 右边的索引比 l 左边的索引小,那查找的条件就不成立了。大的话,同样的道理。 详情如下图:

顺序查找法与二分查找法之间的性能对比
二分查找虽然比顺序查找的效率高数倍,但它,仅仅只是对于有序数组的高效查找法。 这也是为什么执行 Array.Sort(); //将传进来的数组元素进行排序
class TestSearch{//读取名为filename的文件并将数据存储到数组中返回public static int[] ReadFile(string filename){//通过某种方式打开 filename 文件FileStream fs = new FileStream(filename, FileMode.Open);//打开文件后,通过某种方式,进行读写StreamReader sr = new StreamReader(fs);//实例话一个整数类型的泛型对象List<int> list = new List<int>();//判断是否读写结束while (!sr.EndOfStream){//由于读写的数据类型是 string ,所以需要转换为 int 类型int num = int.Parse(sr.ReadLine());//然后,添加在整数类型的泛型数组list.Add(num);}//关闭 filename 文件fs.Close();//不在读写文件sr.Close();//toArray():将 list 数组 复制到新的数组//返回值的就是,list 的数组元素return list.ToArray();}//顺序查找法public static int OrderSearch(int[] arr, int target){for (int i = 0; i < arr.Length; i++)if (arr[i] == target)return i;return -1;}/// <summary>/// 二分查找,在有序数组arr中,查找target///如果找到target,返回相应的索引index///如果没有找到target,返回-1/// </summary>/// <param name="arr">数组</param>/// <param name="target">想查找的值</param>public static int BinarySearch(int[] arr, int target){int l = 0; //代表数组头部的索引int r = arr.Length - 1; //代表数组尾部的索引while (l <= r){//中间值//用于比较 target《查找的值》是中间值的左边还是右边int mid = l + (r - l) / 2;if (target < arr[mid])r = mid - 1;else if (target > arr[mid])l = mid + 1;elsereturn mid;}return -1;}}//===================================================================//class Program{private static void Main(string[] args){string filename3 = "测试文件2/游戏会员表.txt";string filename4 = "测试文件2/游戏用户表.txt";int[] arr3 = TestSearch.ReadFile(filename3);int[] arr4 = TestSearch.ReadFile(filename4);Console.WriteLine("游戏会员数量 :" + arr3.Length);Console.WriteLine("调查用户数量 :" + arr4.Length);Console.WriteLine();Stopwatch t3 = new Stopwatch();Stopwatch t4 = new Stopwatch();Console.WriteLine("顺序查找法");t3.Start();int sum3 = 0;for (int i = 0; i < arr4.Length; i++){int target = arr4[i];if (TestSearch.OrderSearch(arr3, target) == -1){//Console.WriteLine(target);sum3++;}}t3.Stop();Console.WriteLine("查找到 :" + sum3 + "个零充玩家");Console.WriteLine("运行时间: " + t3.ElapsedMilliseconds + "ms");Console.WriteLine();Console.WriteLine("二分查找法");t4.Start();Array.Sort(arr3);int sum4 = 0;for (int i = 0; i < arr4.Length; i++){int target = arr4[i];if (TestSearch.BinarySearch(arr3, target) == -1){//Console.WriteLine(target);sum4++;}}t4.Stop();Console.WriteLine("查找到 :" + sum4 + "个零充玩家");Console.WriteLine("运行时间: " + t4.ElapsedMilliseconds + "ms");Console.ReadKey();}}
运行结果:

