C语言设计从键盘输入10个数存入数组A,将A数按升序排列存入数组B,用二分法在B中查找元素X,输出X在B中的位置,如果未找到,给出相应提示信息

C语言设计从键盘输入10个数存入数组A,将A数按升序排列存入数组B,用二分法在B中查找元素X,输出X在B中的位置,如果未找到,给出相应提示信息

设计思路:

1.采用升序法和折半查找法。首先定义大小为10的整型数组a和b,再定义整型变量i,j,k,temp,min,x,n,m并且给n,m赋初值0,9。
2. 通过for循环将键盘输入的数依次赋给a的10个元素。
3.采用for循环,i+1赋值给k,数组下标i赋值给min。再用for循环嵌套,把k赋值给j,如果下标为j的值小于下标为min的值,则下标j赋值给min,下标为i的值赋值给temp,下标为min的值赋值给下标为i的值,然后再将temp赋值给a[min],即下标为j的值赋给a[min],以此方法找到新的最小值;如果下标为j的值大于下标为min的值,则新的最小值还是a[min]。每循环一次,就排好一个元素的顺序,以此循环直到循环结束,则10个元素会从小到大排序。
4.把数组中的元素赋值给b数组中。通过键盘输入想要查找的数x,当n<=m时执行循环,首先查数组的中项,即(n+m)/2的值赋给i。如果下标为i的值恰好等于x,则结束循环,输出要查找的数x的位置;如果下标位i的值小于x,则i+1赋值给n;如果下标为i的值大于x,则i-1赋值给m。当n>m时,循环体语句不执行。重复以上循环步骤直到循环结束。
5.如果下标为i的值不等于x,则输出No found;否则,输出要查找的数x的位置。

代码如下:

#include<stdio.h>
void main()
{
   int i,j,k,a[10],b[10],temp,min,x,n=0,m=9;
    printf("输入10个整数:\n");
    for(i=0;i<10;i++)
    scanf("%d",&a[i]);
     for(i=0;i<9;i++)
{
	k=i+1;
	min=i;
	for(j=k;j<10;j++)
		if(a[j]<a[min])
			min=j;
		temp=a[i];
		a[i]=a[min];
		a[min]=temp;
}
for(i=0;i<10;i++)
b[i]=a[i];
printf("请输入你想找的数:");
scanf("%d",&x);
while(n<=m)
{
	i=(n+m)/2;
	if(b[i]==x)
		break;
	if(b[i]<x)
		n=i+1;
	if(b[i]>x)
		m=i-1;
}
if(b[i]!=x)
printf("No found");
else
printf("这是第%d个数\n",i+1);
}

代码测试图

在这里插入图片描述

  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
题目描述:编写程序,从键盘输入10个存入数组a,将a组按升序排列存入数组b,用二分法在b查找元素x,输出x在b位置,如果未找到给出相应提示信息。 解题思路:首先从键盘读入10个存入数组a,然后将a组按升序排列存入数组b。对于升序排列组b,可以使用二分法查找元素x,找到x的位置以后输出即可。如果在b未找到x,则输出相应提示信息。 代码实现: ```python # 定义函:将组a按升序排列存入数组b def sort(a, b): for i in range(len(a)): b[i] = a[i] for i in range(len(b)): for j in range(i, len(b)): if b[i] > b[j]: b[i], b[j] = b[j], b[i] # 定义函:在组b查找元素x def bin_search(x, b): left, right = 0, len(b) - 1 while left <= right: mid = (left + right) // 2 if x < b[mid]: right = mid - 1 elif x > b[mid]: left = mid + 1 else: return mid return -1 # 主程序 a = [0] * 10 # 定义组a,长度为10 b = [0] * 10 # 定义组b,长度为10 for i in range(10): a[i] = int(input("请输入一个:")) sort(a, b) # 调用函将a组按升序排列存入b组 print("组b元素为:", b) x = int(input("请输入要查找元素x:")) index = bin_search(x, b) # 调用函在b查找x if index == -1: print("未找到元素x") else: print("元素x在b位置为:", index) ``` 运行结果: ``` 请输入一个:5 请输入一个:8 请输入一个:2 请输入一个:9 请输入一个:7 请输入一个:1 请输入一个:6 请输入一个:3 请输入一个:4 请输入一个:0 组b元素为: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 请输入要查找元素x:6 元素x在b位置为: 6 ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无趣:

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值