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二分搜索/折半查找 --- 递归、非递归
最新推荐文章于 2024-04-21 18:12:02 发布