1.递归实现: #include <stdio.h> #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 <stdio.h> #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]); }