• 码海拾遗:二分查找


      二分查找法(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 }
  • 相关阅读:
    (82)zabbix如何选择适合的监控类型
    (80)zabbix性能优化中的几个建议
    (79)zabbix key总是not supported的解决方法
    (78)zabbix值缓存(value cache)说明
    Centos7搭建docker仓库
    centos7安装docker
    Win10调整MTU值
    nginx配置ssl证书
    CentOS7.6配置do.cker和K.B.S
    RAID阵列盘有一块状态变为外来处理方法
  • 原文地址:https://www.cnblogs.com/lianshuiwuyi/p/7627123.html
Copyright © 2020-2023  润新知