给定一组数组arr[] = {0,1,2,3,4,5,6,7,8,9 },随机输出一个十以内的数,代码实现随即输出一个随机数,并用程序实现用二分查找法找出随机数。
输出随机值。
srand和rand需要头文件 #include <stdlib.h>
time()需要头文件 #include <time.h>
输出多少以内的数就给rand()随机生成数取余多少
#include <time.h>
#include <stdlib.h>
srand(time(0));
int x = rand()%10;
printf("%d\n", x);
算法思路:
1.如果查找的数据正好就是中心数据则直接输出
2.如果查找的数据比中心数据小则缩小查找范围至小的下半段
3.如果查找的数据比中心数据大则缩小查找范围至大的上半段
查找循环语句如下所示:
while (left <= rigth)
{
mid = (left + rigth) / 2;
if (arr[mid] > x)
{
rigth = mid - 1;
}
else if (arr[mid] < x)
{
left = mid + 1;
}
else
{
break;
}
}
最后附上完整代码:
#include <time.h>
#include <stdlib.h>
int main()
{
int arr[] = {0,1,2,3,4,5,6,7,8,9 };
int left = 0;
int rigth = sizeof(arr)/sizeof(int) - 1;
int mid = 0;
srand(time(0));
int x = rand()%10;
printf("%d\n", x);
while (left <= rigth)
{
mid = (left + rigth) / 2;
if (arr[mid] > x)
{
rigth = mid - 1;
}
else if (arr[mid] < x)
{
left = mid + 1;
}
else
{
break;
}
}
if (left <= rigth)
{
printf("找到目标数据的下标为:%d\n", mid);
}
else
{
printf("找不到目标数据\n");
}
}