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 }
  • 相关阅读:
    我国主机遭境外控制激增近80%
    NSOperation 详解
    NSOperation 详解
    Bitmap的recycle问题
    Bitmap的recycle问题
    NSDate 格式化含有毫秒
    NSDate 格式化含有毫秒
    CSS长度单位:px和pt的区别
    CSS长度单位:px和pt的区别
    Object-c学习笔记十八-----NSPredicate
  • 原文地址:https://www.cnblogs.com/wujufengyun/p/6859811.html
Copyright © 2011-2022 走看看