递归分治二分查找法

   2:  
int high)
   4: {
int i, sum1 = 0, sum2 = 0, sum3 = 0;
   6:  
if(low + 1 == high)
   8:     {
return low + 1;
return high + 1;
  11:     }
  12:  
/*n是偶数*/
  14:     {
for(i = low; i <= low + (high - low) / 2; i++)
/*前半段和*/
  17:  
for(i = low + (high - low) / 2 + 1; i <= high; i++)
/*后半段和*/
  20:  
return getFalseCoin(coin, low, low + (high - low) / 2);
  22:  
return getFalseCoin(coin, low + (high - low) / 2 + 1, high);
  24:     }
  25:  
if((high - low + 1) % 2 != 0)
  27:     {
for(i = low; i <= low + (high - low) / 2 - 1; i++)
/*前半段和*/
  30:  
for(i = low + (high - low) / 2 + 1; i <= high; i++)
/*后半段和*/
  33:  
  34:         sum3 = coin[low+(high-low)/2];
  35:  
if(sum1 < sum2)
return getFalseCoin(coin, low, low + (high - low) / 2 - 1);
  38:  
if(sum1 > sum2)
return getFalseCoin(coin, low + (high - low) / 2 + 1, high);
  41:  
return low + (high - low) / 2 + 1;
  43:     }
  44:  
  45: }
  46:  
int main()
  48: {
int coin[30] = {2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2};
, getFalseCoin(coin, 0, 29));
return 0;
  52: }

相关文章: