1 /* 2 * FILE: BinarySearch.C 3 * DATE: 20180306 4 * ============== 5 * DESCRIPTION: 折半查找_递归、非递归实现 6 * 二分搜索 BinarySearch 7 */ 8 9 #include <stdio.h> 10 11 int binarySearch(int value, int a[], int len); // 二分查找 12 int binarySearch_recursive(int value, int a[], int begin, int end); 13 void insertSort(int a[], int len); // 插入排序,从小到大 14 void display(int a[], int len); 15 16 int main(int argc, char *argv[]) 17 { 18 int a[] = {9,6,5,1,3,2}; 19 int len = sizeof(a)/sizeof(a[0]); 20 display(a, len); 21 insertSort(a, len); 22 display(a, len); 23 printf("%d at %d\n", 3, binarySearch(3, a, len)); 24 printf("%d at %d\n", 3, binarySearch_recursive(3, a, 0, len-1)); 25 return 0; 26 } 27 28 // 二分搜索——非递归 29 int binarySearch(int value, int a[], int len) 30 { 31 int left = 0, right = len-1; 32 33 while(left<=right) 34 { 35 int mid = (left+right)/2; 36 if(value < a[mid]) 37 right = mid-1; 38 else if(value > a[mid]) 39 left = mid+1; 40 else 41 return mid; 42 } 43 return -1; 44 } 45 46 // 二分搜索--递归 47 int binarySearch_recursive(int value, int a[], int begin, int end) 48 { 49 if(begin > end) 50 return -1; 51 int mid = (begin+end)/2; 52 if(value > a[mid]) 53 binarySearch_recursive(value, a, mid+1, end); 54 else if(value < a[mid]) 55 binarySearch_recursive(value, a, begin, mid-1); 56 else 57 return mid; 58 } 59 60 // 插入排序 61 void insertSort(int a[], int len) 62 { 63 int i; 64 for(i=1; i<len; i++) 65 { 66 int j = i; 67 int temp = a[i]; 68 while(j-1>=0 && temp<a[j-1]) // Note: j-1>=0 69 { 70 a[j] = a[j-1]; 71 j--; 72 } 73 a[j] = temp; 74 } 75 } 76 77 void display(int a[], int len) 78 { 79 int i; 80 for(i=0; i<len; i++) 81 printf("%d ", a[i]); 82 printf("\n"); 83 }
(C语言)BinarySearch二分搜索/折半查找 --- 递归、非递归
猜你喜欢
转载自blog.csdn.net/trb331617/article/details/79472614
今日推荐
周排行