二分查找法只适用于有序的数列,取中间数与查找的数比较,然后再确定头或者尾
#define _CRT_SECURE_NO_WARNINGS//在vs2013下运行要关闭安全监察
#include<stdio.h>#include<stdlib.h>
//获得数组首地址,要查找的数,最小下标,最大下标
int search(int *p, int key, int low, int high)
{
int mid;
while (low <= high)
{
mid = (low + high) / 2;
if (key == p[mid])
{
return mid;
}
else if (key > p[mid])
{
low = mid + 1;
}
else
{
high = mid - 1;
}
}
return -1;
}
void main()
{
int n;
printf("请输入要导入多少数据");
scanf("%d", &n);
int *a = (int *)malloc(sizeof(int)*n);
for (int i = 0; i < n; i++)
{
scanf("%d", &a[i]);
}
printf("请输入要查找的数\n");
int shu;
scanf("%d", &shu);
//通过下标来访问
int result = search(a, shu, 0, n-1);
if (result == -1)
printf("%d不在该数列中\n", shu);
else
printf("%d在数列中是第%d个元素", shu, result + 1);
free(a);
system("pause");
}