C++ Code
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
#include<stdio.h>
#include"stdlib.h" #include"string.h" #include"math.h" /**************非递归法****************/ int Binary_search(int a[], int search_num, int high, int low) { int middle; while (low <= high) { middle = (high + low) / 2; if (a[middle] < search_num) low = middle + 1; else if (a[middle] > search_num) high = middle - 1; else return middle; } return -1; } /*************递归法查找**************/ int Binary_search1(int a[], int search_num, int high, int low) { int middle; middle = (low + high) / 2; while (low <= high) { if (a[middle] == search_num) return middle; else if (a[middle] < search_num) return Binary_search1(a, search_num, high, middle + 1); else if (a[middle] > search_num) return Binary_search1(a, search_num, middle - 1, low); } return -1; } int main(void) { int a[] = {1,3,6,9,11,23,56,98}; int length; int search_num; int result; printf("请输入要查找数据\n"); scanf("%d", &search_num); length = sizeof(a) / sizeof(int); result = Binary_search(a, search_num, length, 0); printf("非递归查找结果为%d\n", result); result = Binary_search1(a, search_num, length, 0); printf("递归查找结果为%d\n", result); } |