在整型有序数组中查找想要的数字, 找到了返回下标,找不到返回-1.(折半查找)
编译环境VS2017
一直接收键盘字符, 如果是小写字符就输出对应的大写字符, 如果接收的是大写字符,就输出对应的小写字符, 如果是数字不输出。
此问题中值得注意的是:C/C++中当数组作为形参时,改参数会退化成指针,会丢失其长度
要知道其长度最简单的办法是,在函数外计算出数组长度
例如在子函数中用sizeof(a) / sizeof(a[0]) - 1;
计算数组长度时,a此时是整型指针类型,与a[0],一样都是四个字节,所以结果恒等于0;
具体实现如下:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int binsearch(int a[],int x,int right) {
int left = 0;
int mid;
while (left <= right) {
mid = (left + right) / 2;
if (x == a[mid]) {
return mid;
}
else if (x > a[mid]) {
left = mid + 1;
}
else if (x < a[mid]) {
right = mid - 1;
}
}
return -1;
}
void main(){
int arr[] = { 1,3,4,5,7,8,11,12,14,15 };
int key;
printf("请输入需要查找的数\n");
scanf("%d", &key);
int R = sizeof(arr) / sizeof(arr[0]) - 1;
if (binsearch(arr, key, R) != -1) {
printf("找到了,下标为%d\n", binsearch(arr, key, R));
}
else {
printf("没有找到\n");
}
system("pause");
}