用C语言实现对一个有序数组的折半查找
Posted 系白杨呀
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用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 ;
int size = 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语言实现对一个有序数组的折半查找的主要内容,如果未能解决你的问题,请参考以下文章