顺序查找,数据大小可以无序
int main()//算法缺点:慢
{
int arr[] = {3,6,9,12,5,8,7,21,44,67,81,26};
int key;
int i;
scanf("%d",&key);
for (i = 0; i < sizeof(arr) / sizeof(arr[0]); i++)
{
if (key == arr[i])
{
printf("找到了在%d号下标\n",i);
return 0;//提前结束这个函数
}
}
printf("找不到\n");
return 0;
}
折半查找,数据必须有序
int main()
{
int arr[] = {3,5,8,10,13,15,19,21,33,56};
int key;
scanf("%d",&key);
int low = 0;//起始下标
int mid;
int high = sizeof(arr) / sizeof(arr[0])-1;//结束下标
while (low <= high)
{
//计算中间下标
mid = (low + high) / 2;
//如果相等则找到
if (key == arr[mid])
{
printf("找到了zai%d下标",mid);
return 0;
}
//如果key更小则在前面部分
if (key < arr[mid])
{
high = mid-1;
}
//如果key更大则在后面部分
if (key > arr[mid])
{
low = mid+1;
}
}
return 0;
}