半折法查找(有点小问题)

刚才是写这个程序的时候,33行写成"high = mid - 1;"和35写成"low = low + 1",结果在输入不存在的数字时,程序陷入死循环,个人理解,似乎加一和减一没影响,此处还需仔细想想才行。

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #define MAX     10
 4 
 5 int binary_search(int *array, int n, int key);
 6 
 7 int main()
 8 {
 9         int i;
10         int n;
11         int key;
12         int array[MAX] = { 3, 6, 8, 38, 79, 343, 444, 1000, 2343, 3333 };
13         for (i = 0; i < MAX; i++) {
14                 printf("第 %d 个   %d  ", i, array[i]);
15                 printf("\n");
16         }
17         printf("enter the number you want to search: \n");
18         scanf("%d", &key);
19         binary_search(array, MAX, key);
20 
21         return 0;
22 }
23 
24 int binary_search(int *array, int n, int key)
25 {
26         n = MAX;
27         int low = 0;
28         int high = n - 1;
29         int mid;
30         while (low < high) {
31                 mid = (low + high) / 2;
32                 if (key < array[mid])
33                         high = mid - 1;
34                 if (key > array[mid])
35                         low = mid + 1;
36                 if (key == array[mid]) {
37                         printf("It locates in %d \n", mid);
38                         return 0;
39                 }
40         }
41        printf("It doesn\'t exist!\n");
42 
43         return 0;
44 }
View Code

 

posted @ 2013-12-09 21:05  hare101  阅读(316)  评论(0)    收藏  举报