//二分法查询 Console.Write("请输入数据个数:"); int n = Convert.ToInt32(Console.ReadLine()); int[] no = new int[n]; int x = 0, y = n - 1; //x、y分别为每次把数组二分后的最小元素、最大元素的下标 //为定义的数组赋值(该程序中数组默认按升序排列,否则需要为数组元素排序) for (int i = 0; i < n; i++) { Console.Write("输入数据{0}:", i + 1); no[i] = Convert.ToInt32(Console.ReadLine()); } Console.Clear(); //清屏 Console.Write("请输入要查询的数:"); int sel = Convert.ToInt32(Console.ReadLine()); //二分法 while (y >= x) { int zj = (x + y) / 2; //zj为x,y的中间值 if (sel == no[zj]) //判断查询值是否是本组元素的中间元素 { Console.WriteLine("第{0}个元素!", zj + 1); break; } else if (sel < no[zj]) //查询值小于中间元素,则中间元素前一位作为下组元素的最大元素 { y = zj - 1; } else if (sel > no[zj]) //查询值大于中间元素,则中间元素后一位作为下组元素的最小元素 { x = zj + 1; } } if (y < x) { Console.WriteLine("查无此数!"); }
时间: 2024-10-03 15:15:11