代码如下:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <Windows.h>
int main() {
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
//在该数组中查找7
int i = 0;
int sz;
int n;
sz = sizeof(arr) / sizeof(arr[0]);
scanf("%d", &n);
for (i = 0; i < sz; i++) {
if (arr[i] == n) {
printf("找到了,下标是%d\n",i);
break;
}
}
if (i == sz) {
printf("未找到");
}
return 0;
}
该办法虽然可以实现查找,但是如果数据过多的时候,效率是十分的慢的,因此可以优化算法使用二分查找;基本思路如下:
- 确定被查找的范围
- 确定被查找范围的左右下标
- 根据左右下标确定中间元素的下标
- 然后找到中间元素和要找的元素比较.
- 找到了,就结束
- 找不到,根据大小关系,确认新的查找范围(折半)
代码如下:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <Windows.h>
int main() {
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
int i;
int sz;
int n;
int left=0;
int right;
sz = sizeof(arr) / sizeof(arr[0]);
scanf("%d", &n);
right = sz - 1;
while (left <= right) {
i = (left + right) / 2;
if (n > arr[i]) {
left = i + 1;
}
else if (n < arr[i]) {
right = i - 1;
}
else {
printf("找到了,下标是%d\n", i);
break;
}
}
if (left > right) {
printf("找不到\n");
}
return 0;
}