• 二分查找


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

    
    
     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 }
  • 相关阅读:
    Win10 ntoskrnl.exe蓝屏解决
    Log POST Data in Nginx
    MACOS关闭指定端口
    获取Skype用户IP地址
    禁止windows10带来的三大隐患问题
    各种语言一句话反弹shell
    2015阿里巴巴安全峰会PPT
    HTTPS反向代理嗅探
    利用arpspoof和urlsnarf 进行ARP嗅探
    收集的几个存在漏洞的程序
  • 原文地址:https://www.cnblogs.com/wujufengyun/p/6859811.html
Copyright © 2020-2023  润新知