1.递归实现:
#include
#define SIZE 10
int data[SIZE] = {10, 20, 30, 40, 50, 60, 70, 80, 90, 100};
int step = 0;
int two_search(int start, int end, int val);
int main(void)
{
int val = 60;
int p = two_search(0, SIZE-1, val);
if (p != -1) printf("Search %d value by %d step!/n",data[p], step);
return 0;
}
int two_search(int start, int end, int val)
{
step++;
int p = 0;
if (start == end) {
if (data[start] == val) return start;
else return -1;
}
p = start + (end -start) / 2 + 1;
if (data[p] == val) return p;
if (data[p] > val) {
p = two_search(start, p, val);
} else {
p = two_search(p, end, val);
}
return p;
}
2.循环实现:
#include
#define SIZE 10
int data[SIZE] = {1, 3, 4, 6, 7, 9, 10, 11, 45, 100};
int main(void)
{
int val = 1;
int po = -1;
int start = 0, end = SIZE -1;
do {
if (start > end) {
po = -1;
break;
}
po = (start + end) /2;
if (data[po] > val) end = po;
if (data[po] < val) start = po;
if (data[po] == val) break;
}while(1);
if (po != -1) printf("Search %d complete!", data[po]);
}