C语言已知一维数组中的10个元素各不相同,但已按升序排列。查找数组中是否存在值为key的数组元素。如果有,输出相应的下标,否则输出not found。你有什么好方法吗? 输入要求 先从键盘输入10个升序排列的整数,然后再输入一个待查找的数据key。 输出要求 输出对应结果。若不存在则输出not found.
时间: 2023-06-06 09:05:23 浏览: 257
这个问题属于计算机科学中的算法问题,我可以回答。可以使用二分查找算法来在该已知一维数组中查找指定的元素。具体方法如下:
1. 定义一个函数,输入参数为已知数组和待查找元素key,返回值为待查找元素在数组中的下标或-1(表示未找到)。
2. 定义左侧指针left为0,右侧指针right为数组长度减一。
3. 通过while循环查找元素。首先判断left指针是否小于或等于right指针,如果是则进行下一步,否则表示未找到。
4. 定义中间指针mid为左侧指针和右侧指针的平均值。
5. 判断中间指针指向的元素是否等于待查找元素key,如果是则返回mid,否则进行下一步。
6. 判断中间指针指向的元素是否大于待查找元素key,如果是则将右侧指针right更新为mid减一,否则将左侧指针left更新为mid加一。
7. 回到步骤3,继续查找。
如果最终未找到,则返回-1。
具体实现代码如下:
```
#include <stdio.h>
int binary_search(int arr[], int key, int len)
{
int left = 0, right = len - 1;
while (left <= right) {
int mid = (left + right) / 2;
if (arr[mid] == key) {
return mid;
} else if (arr[mid] > key) {
right = mid - 1;
} else {
left = mid + 1;
}
}
return -1;
}
int main()
{
int arr[10];
printf("请输入10个升序排列的整数:");
for (int i = 0; i < 10; i++) {
scanf("%d", &arr[i]);
}
int key;
printf("请输入待查找的数据:");
scanf("%d", &key);
int index = binary_search(arr, key, 10);
if (index == -1) {
printf("not found\n");
} else {
printf("%d\n", index);
}
return 0;
}
```
当输入待查找的数据为已知数组中存在的元素时,程序会输出该元素在数组中的下标;当输入待查找的数据为已知数组中不存在的元素时,程序会输出not found。
阅读全文