zoukankan      html  css  js  c++  java
  • 二分查找

    一、普通的二分查找算法:

    
    
     1 int BS(int a[], int k, int n)
     2 {
     3     int low = 0;
     4     int high = n - 1;
     5     while (low <= high)
     6     {
     7         int mid = (high - low) / 2 + low;
     8         if (a[mid] == k)
     9             return mid;
    10         else
    11             if (a[mid] < k)
    12                 low = mid + 1;
    13             else
    14                 high = mid - 1;
    15     }
    16     return -1;
    17 }
    18 int main()
    19 {
    20     int a[] = { 1,1, 3, 6, 8, 9, 9, 10 };
    21     cout << BS(a, 0, 8) << endl;
    22     system("pause");
    23     return 0;
    24 }
    
    
    
     

    二、查找关键元素在有序数组中的首次出现位置:

     1 int lowerBoner(int a[], int k,int n)
     2 {
     3     int low = 0;
     4     int high = n - 1;
     5     while (low < high)
     6     {
     7         int mid = (high - low) / 2 + low;
     8         if (a[mid] < k)
     9             low = mid+1;
    10         else
    11             high = mid;
    12     }
    13     if (low >= n || a[low] != k)
    14         return -1;
    15     else
    16         return low;
    17 }
    18 int main()
    19 {
    20     int a[] = { 1,1, 3, 6, 8, 9, 9, 10 };
    21     cout << lowerBoner(a, 9, 7) << endl;
    22     system("pause");
    23     return 0;
    24 }

    三、查找关键元素在有序数组中的末次出现位置:

     1 int upperbound(int a[], int k,int n){
     2     int low = 0;
     3     int high = n - 1;
     4     while (low < high){
     5         int mid = low + (high - low + 1) / 2;
     6         if (a[mid] > k){
     7             high = mid - 1;
     8         }
     9         else{
    10             low = mid;
    11         }
    12     }
    13     if (low >= n || a[low] != k){
    14         return -1;
    15     }
    16     else{
    17         return low;
    18     }
    19 }
    20 
    21 int main()
    22 {
    23     int a[] = { 1,1, 3, 6, 8, 9, 9, 10 };
    24     cout << upperbound(a, 1, 8) << endl;
    25     system("pause");
    26     return 0;
    27 }
  • 相关阅读:
    整数划分递归模板
    最近点对算法模板
    计算几何模板
    poj1269---直线位置关系
    poj1017----模拟
    MVC 提交List 集合 注意对应的参数名称
    使用 WebClient 來存取 GET,POST,PUT,DELETE,PATCH 網路資源
    对路径访问拒绝,要加上具体filename/c.png
    sql 列集合
    百度地图 Infowidow 内容(content 下标签) 点击事件
  • 原文地址:https://www.cnblogs.com/wujufengyun/p/6859811.html
Copyright © 2011-2022 走看看