| | | | | |

Loop Invariants - Binary Search

unsigned int lower_bound (T* v, unsigned int max, T t)
{
  unsigned int   low  = 0;
  unsigned int   mid;
  unsigned int   hih = max;
  while (low < hih)
  {
    // (1) low < hih
    // (2) v[low - 1] < t (if index is valid)
    // (3) t <= v[hih]     (if index is valid)
    mid =  (low + hih) / 2;  
    if (v[mid] < t)          
      low = mid + 1;         
    else                     
      hih = mid;             
    // (4) low <= hih
    // (5) hih - low has decreased
    // (6) v[low - 1] < t (if index is valid)
    // (7) t <= v[hih]     (if index is valid)
  }  
  return low;
}

| | Top of Page | 3. Introduction to Algorithm Analysis - 13 of 23