码海拾遗:二分查找

Posted 落雷

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了码海拾遗:二分查找相关的知识,希望对你有一定的参考价值。

  二分查找法(Binary Search):在有序数组中查找某一特定元素位置的搜索算法

  实现:

 1 //递归二分查找
 2 template <typename T>
 3 int binarySearch(T *arr, int start, int end, T key)
 4 {
 5     if (start > end)
 6         return -1;
 7 
 8     int mid = (start + end) / 2;
 9     if (arr[mid] < key)
10         return binarySearch(arr, mid+1, end, key);
11     else if (arr[mid] > key)
12         return binarySearch(arr, start, mid-1, key);
13     else
14         return mid;
15 }
16 
17 //非递归二分查找
18 template <typename T>
19 int binarySearch(T *arr, int arrSize, T key)
20 {
21     if (NULL == arr || arrSize == 0)
22         return -1;
23 
24     int start = 0;
25     int end = arrSize - 1;
26     int mid = 0;
27 
28     while (start <= end)
29     {
30         mid = (start + end) / 2;
31         if (arr[mid] == key)
32             return mid;
33         else if (arr[mid] < key)
34             start = mid + 1;
35         else
36             end = mid - 1; 
37     }
38     return -1;
39 }
40 
41 template <typename T>
42 int change(T& a, T& b)
43 {
44     T tmp = a;
45     a = b;
46     b = tmp;
47     return 0;
48 }
49 
50 template <typename T>
51 int sort(T* arr, int arrSize)
52 {
53     if (NULL == arr || arrSize == 0)
54         return -1;
55     for (int i = 0; i < arrSize; ++i)
56     {
57         for (int j = 0; j < arrSize; ++j)
58         {
59             if (arr[i] < arr[j])
60                 change(arr[i], arr[j]);
61             /*{
62                 int tmp = arr[i];
63                 arr[i] = arr[j];
64                 arr[j] = tmp;
65             }*/
66         }
67     }
68     return 0;
69 }

 

以上是关于码海拾遗:二分查找的主要内容,如果未能解决你的问题,请参考以下文章

码海拾遗:Linux常用命令

码海拾遗:strstr()和strcpy()实现

码海拾遗:Linux多线程mutex锁

码海拾遗:简单Socket(TCP)类实现

码海拾遗:高并发服务器模型简述

码海拾遗:二叉树的遍历(递归实现)