#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
//折半查找
int arr[] = { 9,11,22,33,44,45,55,66,77,88 };
int min = 0;//最小下标
int mid = (sizeof(arr)/ sizeof(arr[0])) / 2;//中间下标
int max = sizeof(arr) / sizeof(arr[0]) - 1;//最大下标
int key;//要查找的数
printf("请输入你要查找的数\n");
scanf("%d", &key);
while (min<=max)
{
if (key > arr[mid])//在原mid右边查找
{
min = mid + 1;
mid = (min + max) / 2;
}
if (key < arr[mid])//在原mid左边查找
{
max = mid - 1;
mid = (min + max) / 2;
}
if(key==arr[mid])//刚好查找数的下标为mid
{
printf("%d在数组,下标为%d", key, mid);
return 0;
}
}
printf("没有找到");
return 0;
}
折半查找是将一个数组分成两部分,为左半边和右半边,方便于其他查找。
输入要查找的数,如:左半边没有查找到,则排除左半边,选择继续在右半边查找,再将要查找的右半边分成两部分,新的左半边和右半边。如:刚好选择查找数刚好为中间mid值,则直接输出下标为mid的arr[mid]。如:选择查找的数不在数组当中,则输出“没有找到”。
输出