2013-11-09 10 views
0

我試圖通過修改二進制搜索算法來實現它。如何在排序後的數組中找到一個元素,使得它之後的所有元素都大於給定值?

int search(int *a, int start,int end,int sum){ 
int s=start,e=end-1,m; 
while(s <= e){ 
    m=s+(e-s)/2; 
    if(a[m] == sum){ 
     return m+1;    
    } 
    else if (a[m] < sum) { 
     s = m + 1; 
    } 
    else { 
     e = m - 1; 
    } 
} 
return m;} 

上述算法有什麼問題?

+0

您是指所有元素之後的所有元素的總和大於給定值?或者每個元素應該由它自己更大?你能舉一個簡單的例子嗎? – amit

+1

什麼輸入導致_wrong_結果,然後? – timrau

+0

「An」元素?由於數組被排序,所以如果元素X滿足條件,那麼在X之後的所有元素也滿足條件。任何數組的最後一個元素也可能滿足這個要求:它後面的(零)元素都大於您選擇的任何值。這個問題需要更嚴格地規定。 – Jon

回答

0
int search(int *a, int start,int end, int sum) { 
    int s = start, e = end - 1, m; 
    while(s <= e) { 

簡單是

// m=s+(e-s)/2; 
    m=(s+e)/2; 

,你必須不斷循環,也許有重複的元素

//   if(a[m] == sum){ 
//    return m+1;    
//   } else 

注意條件改爲<=

//  if (a[m] < sum) { 
     if (a[m] <= sum) { 
      s = m + 1; 
     } 
     else { 
      e = m - 1; 
     } 
    } 

已返回s這裏

// return m; 
    return s; 
} 
+0

我們爲什麼要返回s? –

相關問題