如何用折半查找法进行查询
要求
在整型有序数组中查找想要的数字,找到了返回下标,找不到返回-1.
代码奉上
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int main() {
int l, r, mid,n;
l = 0;
char str[10] = { 0,1,2,3,4,5,6,7,8,9 };
printf("请输入你要查找的值\n");
scanf("%d", &n);
r= sizeof(str) / (sizeof(str[0]))-1;
mid = (r + l) / 2;
while (l <= r) {
if (n > str[mid]) {
l = mid + 1;
}
if (n < str[mid]) {
r = mid - 1;
}
if(n==str[mid]) {
printf("%d\n", mid);
break;
}
mid = (r + l) / 2;
}
if (l > r)return -1;
system("pause");
return 0;
}
代码分析
折半查找法远远的降低了查找时间,但是仅仅用于有序数列中。
其中小" tips"
r= sizeof(str) / (sizeof(str[0]))-1;
利用sizeof函数得到数组的长度。
一般情况下也可以引入头文件
#include<string.h>
用
strlen(str);
得到函数长度。