二分法
这里首先介绍一个查找数据的方法--二分法
值得注意的是,这段代码里的------
int sz=sizeof(arr)/sizeof(arr[0]);
这串代码可以方便大家计算出一个字符所占用的字节
sizeof(arr)计算了全部的字节数,而sizeof(arr[0])则计算了一个字符所占的字节数
sizeof(arr)/sizeof(arr[0])则计算出了一串字符有几个字符
注:(sizeof函数需标注头文件stlib.h)
#include <stdio.h>
#include <stlib.h>
int main()
{
int arr[] = { 1,2,3,4,5,6,7,8,9, };
int sz = sizeof(arr) / sizeof(arr[0]);
int k = 7; //输入查找数
int i = 0;
int flag = 0;
int left = 0;
int right = sz-1;
while (left <= right)
{
int add = (left + right) / 2;
/*int add = (left + right) / 2;*/
int add = (right - left) / 2 + left; //ֹԽ
if (arr[add] < k)
{
left = add + 1;
}
else if (arr[add] > k)
{
right = add - 1;
}
else
{
printf("找到了,下标是%d\n", add);
flag = 1;
break;
}
}
if (flag == 0)
{
printf("Ҳ\n");
}
return 0;
}
这里再对比下面的这串代码
普通法
int main()
{
int arr[] = { 1,2,3,4,5,6,7,8,9 };
int k = 6; //输入查找对象
int i = 0;
int sz = sizeof(arr) / sizeof(arr[0]);
int flag =0;
for (i = 0; i < sz; i++)
{
if (k == arr[i])
{
printf("找到了,下标是%d\n", i);
flag = 1;
break;
}
}
if (flag == 0)
{
printf("找不到\n");
}
return 0;
}
对比这串代码可以看出二分法可以减少计算量,当要查找的数据特别越庞大时二分法的好处就越能体现