#include "stdio.h" #define N 10 int main(){ int a[N]={1,2,3,4,10,6,7,8,9,9},i,left,right,mid,x; puts("输入你要查找的数据:\n"); scanf("%d",&x); left=0;right=N-1;mid=(left+right)/2; while(x!=a[mid]&&right>left){ if(x<a[mid]){ right=mid; mid=(left+right)/2; } else if(x>a[mid]){ left=mid; mid=(left+right)/2; } } if(x==a[mid]){ for(i=0;i<N;i++){ printf("%d ",a[i]); } printf("\n该数为数组中第%d个",mid+1); } else printf("该数据不存在"); return 0; } 该段代码如何改进
时间: 2024-03-18 11:39:49 浏览: 15
该段代码可能存在的问题是,数组a中可能存在多个值相同的元素,而二分查找只能找到其中的一个。如果用户输入的数据x在数组a中有多个相同的元素,那么程序只会输出其中一个数的位置,而不会输出其他相同元素的位置。
为了解决这个问题,可以修改程序,在找到第一个等于x的元素时,继续向前查找,直到找到第一个不等于x的元素为止,这样就能够输出所有等于x的元素的位置。
修改后的程序如下所示:
```
#include "stdio.h"
#define N 10
int main(){
int a[N]={1,2,3,4,10,6,7,8,9,9},i,left,right,mid,x;
puts("输入你要查找的数据:\n");
scanf("%d",&x);
if(x<a[0] || x>a[N-1]){
printf("该数据不存在");
return 0;
}
left=0;right=N-1;mid=(left+right)/2;
while(x!=a[mid]&&right>left){
if(x<a[mid]){
right=mid;
mid=(left+right)/2;
}
else if(x>a[mid]){
left=mid;
mid=(left+right)/2;
}
}
if(x==a[mid]){
for(i=0;i<N;i++){
printf("%d ",a[i]);
}
printf("\n该数在数组中的位置为:");
i=mid;
while(i>=0 && a[i]==x){
printf("%d ",i+1);
i--;
}
i=mid+1;
while(i<N && a[i]==x){
printf("%d ",i+1);
i++;
}
}
else {
printf("该数据不存在");
}
return 0;
}
```
这样,即使用户输入的数据x在数组a中有多个相同的元素,程序也能够输出所有等于x的元素的位置。
相关推荐
![7z](https://img-home.csdnimg.cn/images/20210720083312.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![7z](https://img-home.csdnimg.cn/images/20210720083312.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![7z](https://img-home.csdnimg.cn/images/20210720083312.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![7z](https://img-home.csdnimg.cn/images/20210720083312.png)
![7z](https://img-home.csdnimg.cn/images/20210720083312.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![7z](https://img-home.csdnimg.cn/images/20210720083312.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)