青春须早为,岂能长少年。这篇文章主要讲述用C语言实现对一个有序数组的折半查找相关的知识,希望能为你提供帮助。
编程思路:
1.首先对于查找一个有序数组arr[]而言,查找数为x,我们需要先定义三个变量left、right和mid,分别代表数组的第一个元素、最后元素下标和中间元素下标。
2.然后设置一个while循环,条件为left小于等于right时执行下面语句。
3.设置三个if判断语句:
(1)if(arr[mid]>
x)时:right = mid -1;
//说明中间元素比所要查找的数大,x应该在左边,则令右边的下标right等于mid-1;
(2)if(arr[mid]<
x)时:left = mid +1;
//说明所要查找的数在右边,令左边小标left=mid+1;
(3)if(arr[mid==x)时,表明找到了这个数,break语句结束循环。
具体实现代码如下:
#define _CRT_SECURE_NO_WARNINGS 1 //这一条语句是因为我是在VS上运行的,为了是sizeof()函数顺利运行。
#include<
stdio.h>
int main()
int arr[] =1,3,4,6,8,9,11,21 ;
intsize = sizeof(arr) / sizeof(arr[0]);
int x;
int i;
printf("请输入查找的数: ");
scanf("%d", &
x);
printf("查找的这个数是%d\\n", x);
//二分查找
int left = 0;
int right = size-1;
while (left <
= right)
int mid = (left + right) / 2;
if ( arr[mid]>
x)
right= mid-1;
if ( arr[mid] <
x)
left= mid+1;
if (arr[mid] ==x )
printf("找到了这个数,它是第%d个数",mid+1);
break;
//printf("mid = %d", mid);
if (left >
right)
printf("抱歉,没有这个数");
return 0;
【用C语言实现对一个有序数组的折半查找】运行结果如下图:
推荐阅读
- #yyds干货盘点# Map - WeakHashMap源码解析
- Flink的sink实战之二(kafka)
- 对话CoCoPIE首席科学家(AI可以当裁判,但不能喧宾夺主)
- 算法题每日一练---第12天(算式900)
- 3 步排查,3 步优化,探针性能损耗直降 44%
- RabbitMQ从概念到使用从Docker安装到RabbitMQ整合Springboot1.5w字最全教学
- 数据库基础学习2022/3/22
- Python单元测试-Unittest
- Angular项目实战Angular2+如何去除URL中的#号