先給大家貼個題,熱乎的,最新的阿里2014實習生筆試題(2014.3.29)。
很經典的二分查詢,找出其中的bug。
題目讓指出bug,我想應該是具體的說明錯在哪,怎麼錯了。
應該是有兩處bug:
1) while 迴圈處條件有錯,如果只有乙個元素,則返回的肯定的-1,導致答案錯誤。應改為 end >= start
2) 程式會進入死迴圈。考慮 start =1, end= 2. 假設 middle = 1. 若每次都執行 start=midlle, 即進入死迴圈。應改為 start = middle+1; end = middle-1;
另外,本題沒有說已排序的陣列是遞增還是遞減的。我在答題時又考慮了遞減的情況,不算多餘吧。
順便給下完整的**:
01
#include
02
03
int
binarysearch(
int
arr,
int
l,
int
r,
int
x)
04
15
return
-1;
16
}
17
18
int
main(
void
)
19
;
21
int
n =
sizeof
(arr)/
sizeof
(arr[0]);
22
int
x = 10;
23
int
result = binarysearch(arr, 0, n-1, x);
24
(result == -1)?
printf
(
"element is not present in array"
)
25
:
printf
(
"element is present at index %d"
, result);
26
return
0;
27
}
遞迴的實現:
01
int
binarysearch(
int
arr,
int
l,
int
r,
int
x)
02
10
return
-1;
11
}
更多關於二分的問題請看無處不在的二分查詢
你真的會二分查詢嗎?
看到這個標題無論你是處於怎樣的心理進來看了,我覺得都是值得的。因為這個問題太簡單,任何乙個開始接觸 真正 演算法基本都是從二分查詢開始的。至於二分查詢都不知道是什麼的可以先去找別的資料看下,再來看這篇文章。既然很簡單,那麼我們開始一起寫乙個吧,要求是對num 不減序列在區間 0,7 進行查詢,當然我...
你真的會二分查詢嗎?
引用請註明出處 看到這個標題無論你是處於怎樣的心理進來看了,我覺得都是值得的。因為這個問題太簡單,任何乙個開始接觸 真正 演算法基本都是從二分查詢開始的。至於二分查詢都不知道是什麼的可以先去找別的資料看下,再來看這篇文章。既然很簡單,那麼我們開始一起寫乙個吧,要求是對num 不減序列在區間 0,7 ...
你真的會二分查詢嗎?
看到這個標題無論你是處於怎樣的心理進來看了,我覺得都是值得的。因為這個問題太簡單,任何乙個開始接觸 真正 演算法基本都是從二分查詢開始的。至於二分查詢都不知道是什麼的可以先去找別的資料看下,再來看這篇文章。既然很簡單,那麼我們開始一起寫乙個吧,要求是對num 不減序列在區間 0,7 進行查詢,當然我...