二分查找
■■■■■■■■■■■■■…■
p r q
要求是一个已经排序的数组!!
我们设立两个下标,一个是第一个,一个是最后一个,分别为p,q。
我们利用数学里面的二分法的思想,找到这个数组的中间位置。记为r。
我们判断要查找的数字和r坐标数字的大小关系,如果x大于r代表的数值,那么我们就把p移到r的位置
■■■■■■■■■■■■■…■
p r q
如果要查找的数字比r代表的数字小,那么就把q移到r的位置
■■■■■■■■■■■■■…■
p r q
我们进行到这一步之后我们再重复上面的操作,找到现在p和q的中值,直到不能在找出中值,就是下面的情况
■■■ 或者■■
prq pq
如果在这个过程中提前找到了值,那么就跳出循环,并且输出现在的下标
反之,我们就输出没有找到该值!!
下面给出代码
#include<stdio.h>
//二分查找//
#define N 10
int main()
{
int a[N];
int x;
printf("请有序的输入一个数组的内容\n");
int i = 0;
//给数组输入值
for (i = 0; i < N; i++)
{
scanf("%d", &a[i]);
}
printf("请输入要查找的数字\n");
scanf("%d", &x);
int p = 0, q = N-1;
int r;
while (p < q - 1)
{
r = (p + q )/ 2;
if (a[r] == x) break;
if (a[r] < x) p = r;
if (a[r]>x) q = r;
}
if (a[r] == x) printf("要查找的数字的下标为%d\n",r);
else printf("很抱歉,没有找到这个数字\n");
return 0;
}