(C语言)BinarySearch二分搜索/折半查找 --- 递归、非递归

  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 }

猜你喜欢

转载自blog.csdn.net/trb331617/article/details/79472614