排序陣列內的查詢 二分查詢

2021-07-29 12:17:56 字數 828 閱讀 2858

在乙個有序的陣列內查詢乙個元素,大家應該都會想到二分查詢。那麼,這樣實現乙個二分查詢需要考慮哪些問題呢?

問題描述:

在乙個整型有序的陣列裡面查詢乙個元素,如果這個元素出現多次,那麼請返回它第一次出現的位置,否則返回-1.

解答:首先,這是乙個有序的陣列,那麼它的排列究竟是公升序還是降序,這是第乙個需要考慮到的問題;然後

查詢到這個元素之後還需要考慮這是不是它第一次出現,因此需要向前依次索引找出最靠前的位置。

c**:

#include #include int bin_search(int arr, int n, int val)

//公升序排列

if(arr[left] < arr[right])

if(arr[middle] < val)

else

}} //降序排列

else

if(arr[middle] > val)

else

}} if(arr[record] == val)

return -1;

}int main()

; int arr = ;

int n = sizeof(arr)/sizeof(arr[0]);

int ret = bin_search(arr, n, 5);

system("pause");

return 0;

}

本來也可以採用在最後利用for迴圈語句從最左端往標記的地方遍歷一遍,查詢看有沒有在前面出現的這個元素,但我覺得這樣可能就違背了二分查詢的原則,因此在不考慮時間複雜度的情況下,可以採用這個方法。

已排序陣列二分查詢

劉汝佳 紫書提供方法 正確答案在 x,y 區間之內,即不會包括y。這種方法老是兩個細節搞不順,如下標註 int bsearch int a,int x,int y,int test return 1 沒有正確答案時返回 1 下面是一種邏輯清晰通順的實現寫法 只有兩個小細節不一樣,但理解起來很自然 以...

搜尋旋轉排序陣列 二分查詢

假設按照公升序排序的陣列在預先未知的某個點上進行了旋轉。例如,陣列 0,1,2,4,5,6,7 可能變為 4,5,6,7,0,1,2 搜尋乙個給定的目標值,如果陣列中存在這個目標值,則返回它的索引,否則返回 1。你可以假設陣列中不存在重複的元素。你的演算法時間複雜度必須是 o log n 級別。示例...

二分查詢公升序陣列

二分法查詢問題,在這裡記錄一下 主要是注意點如下 1 使用 left,right 雙閉合區間來查詢,因此while必須是 因為只有如此才能在迴圈結束的時候是left right 1,這樣保證所有的資料都遍歷完 2 mid left right left 2 比 mid left right 2的好處...