|
发表于 2016-9-18 15:10:07
|
显示全部楼层
/*
**折半查找法--迭代实现
**2016年9月17日 20:57:55
*/
//折半查找法的前提条件: 待查找的元素已经按顺序排列好
//设置3个指针, low, middle, high
//low指向查找区域的下界, high指向查找区域的上界, middle = (low + high) / 2
#include <stdio.h>
#define FIND 1
#define NOTFIND 0
#define SIZE 15 //数组的长度
typedef int Status;
typedef int ElemType;
Status half_search(ElemType *, ElemType, int *); //待查找的数组, 需要查找的元素, 查找到的下标
int main()
{
ElemType data[SIZE] = {1, 1, 2, 3, 5 ,8, 13, 21, 34, 55, 89, 144, 233, 377, 610};
ElemType e; //元素按从小到大的顺序排列
int index;
printf("请输入要查找的元素:\n");
scanf("%d", &e);
if(half_search(data, e, &index))
printf("查找成功! 元素%d在数组中的下标为%d\n", e, index);
else
printf("查找失败! 元素%d不在数组中\n", e);
return 0;
}
//迭代查找法迭代实现
Status half_search(ElemType *data, ElemType e, int *index)
{
int low, high, middle;
low = 0; //初始化三个指针
high = SIZE - 1;
middle = (low + high) / 2;
while(low != high)
{
if(e > data[middle])
low = middle + 1;
else if(e < data[middle])
high = middle - 1;
else
{
*index = middle;
return FIND;
}
middle = (low + high) / 2;
}
if(e == data[middle])
{
*index = middle;
return FIND;
}
else
return NOTFIND;
}
|
|