int Sqrt(int x )
{
    if(x < 2)  
        return x;
    int left = 1, right = x / 2, mid = 0;
    while(left <= right)
    {
        mid = (left + right) / 2; 
        if(x / mid == mid)
          return mid;
        else {
              if (x / mid < mid)
                  right = mid - 1;
              else 
                  left = mid + 1;
            }
    }
    return right;
}
1. 用 x/ mid 与mid比较,而不是mid*mid与比较。因为mid*mid可能会溢出。
2.用right = x / 2,可以比right = x省时间。因为根号x小于等于x/2。
3.x / mid == mid并不等同于 mid * mid == x;因为x / mid可能是截断小数位得到的整数。