从键盘输入一个整数,用折半查找法找出该数在10个有序整型数组a中的位置。若该数不在a中,则打印出相应信息。试编程。
时间: 2023-05-31 15:20:10 浏览: 153
### 回答1:
首先,我们需要先定义一个有序整型数组a,长度为10。然后,从键盘输入一个整数num,作为要查找的数。
接下来,我们可以使用折半查找法来查找num在a中的位置。具体步骤如下:
1. 定义变量left和right,分别表示查找范围的左右边界。初始时,left为0,right为a的长度减1。
2. 在while循环中,每次计算中间位置mid,如果a[mid]等于num,则返回mid。
3. 如果a[mid]大于num,则说明num在左半部分,将right更新为mid-1。
4. 如果a[mid]小于num,则说明num在右半部分,将left更新为mid+1。
5. 如果left大于right,则说明num不在a中,打印相应信息。
下面是具体的代码实现:
```python
a = [1, 3, 5, 7, 9, 11, 13, 15, 17, 19] # 有序整型数组a
num = int(input("请输入要查找的整数:")) # 从键盘输入要查找的整数
left, right = 0, len(a) - 1 # 初始化查找范围的左右边界
while left <= right:
mid = (left + right) // 2 # 计算中间位置
if a[mid] == num: # 如果找到了num,返回位置
print("要查找的整数在a中的位置为:", mid)
break
elif a[mid] > num: # 如果a[mid]大于num,更新right
right = mid - 1
else: # 如果a[mid]小于num,更新left
left = mid + 1
else: # 如果left大于right,说明num不在a中
print("要查找的整数不在a中")
```
运行结果如下:
```
请输入要查找的整数:5
要查找的整数在a中的位置为: 2
```
```
请输入要查找的整数:20
要查找的整数不在a中
```
### 回答2:
本题需要使用折半查找算法思想,即将有序数组划分为两个子数组,判断目标数值在哪一个子数组中,继续不断划分直至找到目标数值。
具体编程实现有以下几个步骤:
1.定义有序整型数组a,以及目标整数input_num;
2.使用输入函数从键盘读取输入的整数input_num;
3.定义变量low和high,分别代表数组a的最小索引和最大索引;
4.进行循环操作,只要low小于等于high,就一直执行以下步骤:
4.1.计算中间位置mid,使用mid=(low+high)/2;
4.2.判断a[mid]是否等于input_num,如果相等,输出mid并结束程序;
4.3.如果a[mid]大于input_num,则在左侧子数组中继续查找,更新high=mid-1;
4.4.如果a[mid]小于input_num,则在右侧子数组中继续查找,更新low=mid+1;
5.如果整个循环结束还没有找到目标数值input_num,则输出相应信息。
完整代码实现如下:
#include <stdio.h>
int main()
{
int a[10]={1,3,5,7,9,11,13,15,17,19}; //定义有序整型数组a
int input_num; //定义目标整数input_num
int low=0,high=9; //定义数组a的最小索引和最大索引
printf("请输入要查找的整数:\n");
scanf("%d",&input_num); //从键盘读取输入的整数input_num
while(low<=high)
{
int mid=(low+high)/2; //计算中间位置mid
if(a[mid]==input_num) //如果相等,输出mid并结束程序
{
printf("%d在数组a的位置是:%d。\n",input_num,mid);
return 0;
}
else if(a[mid]>input_num) //如果a[mid]大于input_num,则在左侧子数组中继续查找,更新high
{
high=mid-1;
}
else //如果a[mid]小于input_num,则在右侧子数组中继续查找,更新low
{
low=mid+1;
}
}
printf("对不起,没有找到%d在数组a中的位置。\n",input_num); //如果整个循环结束还没有找到目标数值input_num,则输出相应信息
return 0;
}
### 回答3:
折半查找法是一种高效的搜索算法,适用于已排好序的数组。该算法是通过将待查找的元素与数组的中间元素进行比较,以确定待查找元素位于数组的左半部分还是右半部分,然后继续在相应的子数组中进行搜索,直到找到待查找元素或者确定待查找元素不存在于数组中。
针对本题,可以按照以下步骤进行编程:
1.声明一个长度为10的整型数组a,并初始化为已排序的整数。
2.从键盘输入一个整数,存入变量target中。
3.定义两个变量low和high,分别表示数组的起始位置和结束位置。初始化为a[0]和a[9]。
4.通过比较target和数组中间元素的大小关系,确定待查找元素位于左半部分还是右半部分,并将low和high更新为相应的位置。
5.在新的子数组中继续进行折半查找,直到找到待查找元素或者low>high。
6.若找到待查找元素,则打印出该元素在数组中的位置。
7.若未找到待查找元素,则打印出相应信息。
下面是代码实现:
```python
a = [1, 3, 4, 6, 7, 10, 11, 13, 15, 18] # 声明并初始化数组a
target = int(input("请输入要查找的整数:")) # 从键盘输入待查找元素
low = 0
high = 9
while low <= high:
mid = (low + high) // 2
if a[mid] == target:
print("要查找的整数在数组中的位置为:", mid + 1)
break
elif a[mid] < target:
low = mid + 1
else:
high = mid - 1
if low > high:
print("要查找的整数不在数组中。")
```
上述代码中,low和high分别指向数组的第一个和最后一个元素,每次将数组折半,效率较高。若找到待查找元素,则打印出该元素在数组中的位置;若未找到,则打印出相应信息。
阅读全文