在一组有序的数组中查找某个数字
方法1:遍历法
方法2:二分法折对法
下面以数组arr[]={1,2,3,4,5,6,7,8,9,10}为例,用两种方法分别查找
8
方法1:遍历法
#include
int main()
{
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
int k = 8;
int i = 0;
int sz = sizeof(arr) / sizeof(arr[0]); //计算元素的个数
for ( i = 0; i <= sz; i++)
{
if (arr[i] == k)
{
printf("找到了,下标是:%dn", i);
break;
}
}
if (sz == i)
{
printf("未找到n");
}
return 0;
}
方法2:二分法
#include
int main()
{
int arr[] = {1,2,3,4,5,6,7,8,9,10};
int k = 8;
int sz = sizeof(arr) / sizeof(arr[0]); //计算数据元素个数
int left = 0; //左下标
int right = sz - 1; //右下标
int mid = 0; //中下标
while (left <= right)
{
mid = (right + left) / 2;
if (arr[mid] < k)
{
left = mid + 1;
}
else if (arr[mid] > k)
{
right = mid - 1;
}
else
{
printf("找到了,下标是:%dn", mid);
break;
}
}
if (left > right)
{
printf("未找到n");
}
return 0;
}