大家好,我是小王!相信很多人在做题的过程中会遇见在某有序数组找到一个数,并把它的下角标打印出来。对于小白来说,确实有点棘手,那今天我来用我的理解教教友友们。
*首先我们要知道一种叫“二分法查找”的算法,这样就可以轻松的找到自己想要的结果。二分法查找适用于数据量较大时,但是数据需要先排好顺序。主要思想是:(设查找的数组区间为array[front, end],下面为大家举一个例子:
在有序数组arr[]={3,12,24,36,55,68,75,88}中找出24的下标。
(1)
(2)将front(左下标),mid(中间值),end(右下标)分别标记出来,又mid=(front+end)/2
(3)将中间值arr[mid]与我们要找的值24作比较
(4)依次重复上面步骤,得到最终结果
下面是代码的运行结果
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int arr[] = {2,12,24,36,55,68,75,88};
int front = 0;//定义左下标;
int sz = sizeof(arr) / sizeof(arr[0]);//求出下标个数;
int end = sz - 1;//定义右下标个数;
int k = 24;
while (front <= end)//避免交叉范围
{
int mid = (front + end) / 2;
if (arr[mid] > k)
{
end = end - 1;
}
else if (arr[mid] < k)
{
front = front + 1;
}
else
{
printf("找到了: % d\n", mid);
}
}
if (front > end)
{
printf("找不到:%d\n");
}
return 0;
}
最后,如股票这篇文章对您有什么帮助的话,给个三连吧!
有不足的地方请多多指教!