二分查詢 你能完全正確嗎?

2021-08-27 17:18:33 字數 2049 閱讀 7497

先給大家貼個題,熱乎的,最新的阿里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

03intbinarysearch(intarr,intl,intr,intx)

04

15return-1;

16}

17

18intmain(void)

19;

21intn =sizeof(arr)/sizeof(arr[0]);

22intx = 10;

23intresult = 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);

26return0;

27}

遞迴的實現:

01intbinarysearch(intarr,intl,intr,intx)

02

10return-1;

11}

更多關於二分的問題請看無處不在的二分查詢

你真的會二分查詢嗎?

看到這個標題無論你是處於怎樣的心理進來看了,我覺得都是值得的。因為這個問題太簡單,任何乙個開始接觸 真正 演算法基本都是從二分查詢開始的。至於二分查詢都不知道是什麼的可以先去找別的資料看下,再來看這篇文章。既然很簡單,那麼我們開始一起寫乙個吧,要求是對num 不減序列在區間 0,7 進行查詢,當然我...

你真的會二分查詢嗎?

引用請註明出處 看到這個標題無論你是處於怎樣的心理進來看了,我覺得都是值得的。因為這個問題太簡單,任何乙個開始接觸 真正 演算法基本都是從二分查詢開始的。至於二分查詢都不知道是什麼的可以先去找別的資料看下,再來看這篇文章。既然很簡單,那麼我們開始一起寫乙個吧,要求是對num 不減序列在區間 0,7 ...

你真的會二分查詢嗎?

看到這個標題無論你是處於怎樣的心理進來看了,我覺得都是值得的。因為這個問題太簡單,任何乙個開始接觸 真正 演算法基本都是從二分查詢開始的。至於二分查詢都不知道是什麼的可以先去找別的資料看下,再來看這篇文章。既然很簡單,那麼我們開始一起寫乙個吧,要求是對num 不減序列在區間 0,7 進行查詢,當然我...