半折法查找(有点小问题)
刚才是写这个程序的时候,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 }