您的位置:首页 > 编程语言 > C语言/C++

【C语言】在整型有序数组中查找想要的数字(折半查找/二分查找)

2019-02-12 12:38 197 查看

程序要求:

写代码可以在整型有序数组中查找想要的数字,找到了返回下标,找不到返回-1.(折半查找)

解题思路:

折半查找(二分查找): 前提是数组有序。

假设有一个升序数组arr【10】,要查找的数是to_find,其基本思想是: 

1)设查找数据的范围下限为left = 0,上限为right = 10 - 1,中点mid = (left + right) / 2,用to_find与中点元素arr【mid】比较。

2)若to_find等于arr【mid】,即找到,停止查找;

3)若to_find > arr【mid】,替换下限left = mid + 1,到右半段继续查找; 

4)若to_find < arr【mid】,替换上限right = mid - 1,到左半段继续查找; 

如此重复前面的过程直到找到或者left > right为止。如果left>right,说明没有此数,打印找不到to_find,程序结束。

具体代码:

[code]#include<stdio.h>
#include<stdlib.h>
int main(){
int arr[10] = { 0, 11, 22, 33, 44, 55, 66, 77, 88, 99 };  //定义一个升序的数组。
int left = 0;
int right = 10 - 1;
int to_find = 0;
int mid;
printf("请输入要找的数X!\n");
scanf_s("%d", &to_find);
while (left <= right){
mid = (left + right) / 2;
if (to_find > arr[mid]){
left = mid + 1;
}
else if (to_find < arr[mid]){
right = mid - 1;
}
else{
break;
}
}
if (left <= right){
printf("找到了 %d !它对应的数组下标是 %d!\n",to_find,mid);
}
else{
printf("没找到 %d !\n",to_find);
}
system("pause");
return 0;
}

运行结果:           

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐