二分查找
2分查找
scanf的返回值是成功读取键盘上输入个数相同,可以通过其返回值配和%d格式,判断是否是非法输入,如果输入的字符,需要用getchar()来读取并销毁,否则无法进行下一次输入。
头文件引用及宏定义
#include<iostream>
#include<cstdlib>
#include<string>
using namespace std;
主函数
int main() {
int a[] = { -12,0,6,16,23,56,80,100,110,115 };
int low = 0, mid = 5, high = 9, flag = 0;
int number = 0;
while (scanf_s("%d", &number) != 1) { //输入检查
printf("illegal input\n");
getchar();
}
while (a[mid] != number) {
if (a[low] == number) {
mid = low;
break;
}
if (a[high] == number) {
mid = high;
break;
}
if ((mid + 1) >= high && mid <= low) {
flag = 1;
break;
}
if (number > a[mid]) {
low = mid + 1;
mid = (high + mid) / 2;
}
else {
high = mid - 1;
mid = (low + mid) / 2;
}
}
if (flag) {
cout << "你的输入不在数组中" << endl;
}
else {
cout << a[mid] << "\t" << mid << endl;
}
return 0;
}