有15个数按由大到小顺序放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中第几个元素的值,如果该数不在数组中,则输出“无此数”
#include<iostream>
#include<algorithm>
using namespace std;
#include <stdio.h>
int main(){
int x[15] = {99, 97, 87, 76, 65, 63, 59, 58, 51, 43, 32, 31, 28, 15, 6};
int n,i,j,temp,m,mid,low,high,p=0;
printf("请输入您要寻找的数:");
scanf("%d", &m);
low = 0;
high = 15-1;
while(low<=high){
mid = (low+high)/2;
if(x[mid] == m){
p = 1;
printf("该数在数组第%d位!", mid);
break;
}
else if(x[mid] > m){
low = mid+1;
}
else{
high = mid-1;
}
}
if(p==0){
printf("无此数!");
}
return 0;
}
#include "stdio.h"
void main()
{
int a[15]={15,14,13,12,11,10,9,8,7,6,5,4,3,2,1};
int left,right,mid;
int num,cnt=0;
printf("请输入你要查找的数据:");
scanf("%d",&num);
left = 0;
right= 14;
while(left<=right){
//计算查找次数
cnt++;
//获取中间位置元素的下标
mid = (left+right)/2;
if(num<a[mid]){
//往右找
left=mid+1;
}else if(num>a[mid]){
//往左找
right=mid-1;
}else{
//找到了
printf("在第%d个位置找到了数据,共查找%d次\n",mid+1,cnt);
break;
}
};
if(left>right){
printf("你要查找的数据不存在\n");
}
}
建议你百度一下二分法查找算法的思路,自己理解了写一下
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632