二分搜尋 一種比較完美的實現方法

2022-04-13 14:51:49 字數 706 閱讀 2670

二分搜尋,也稱二分查詢、折半搜尋,是一種在有序陣列中查詢特定元素的搜尋演算法。搜尋從陣列的中間元素開始,如果中間元素剛好是要查詢的元素,則搜尋結束,如果要查詢的特定元素大於(小於)中間元素,則在陣列大於(小於)中間元素的一半中查詢。該演算法的遞迴實現比較容易理解,思路更清晰,但效率方面仍有提高的空間。

**如下:

//遞迴版本

int binary_search( const int arr, int low, int high, int key)

}

需要注意的是int mid = low+(high-low)/2;而不是(low+high)/2,避免了溢位的情況。

但是當有序陣列存在等值時,該方法需要根據指定的規則選取第乙個(最後乙個)的等值,此時只需要從mid向前(後)尋找即可。

由於尋找第乙個、最後乙個等值的時候,每次移動的步長為1,移動效率較低,此時可以再次使用二分查詢的方法,加快尋找速度。

**如下:

#include //flag 1表示查詢第乙個等值 0查詢最後乙個等值

int binarysearch(int *data, int length,int val,int flag)

else if(flag==1)

else

return mid;//返回索引值

} else if(data[mid]

一種近乎完美的加密演算法 擴散加密演算法

引言 在開始介紹之前,請讓我們來看幾個問題。有沒有一種對稱加密演算法能夠支援任意長度密匙加密呢?有沒有一種加密演算法能夠同時支援對稱和非對稱加密呢?有麼有一種加密演算法在實現完全擴散時所需要的步驟最少呢?這樣的演算法一定是存在的!擴散加密演算法是以擴散演算法為基礎,在處理的過程中加入密匙從而實現加密...

二分搜尋的模板(一)

二分搜尋是演算法搜尋一部分的重要內容。雖然變化多端,但仍有跡可循,有法可依。記錄一下在網上遇到的模板 這個模版的核心是將二分搜尋 binary search 問題轉化成 在給定公升序陣列 沒有相同元素 中,尋找大於等於 target 值的最小索引或小於等於 target 值的最大索引。有幾點需要注意...

一種完美的文字溢位省略號解決方案

我們都知道 css 裡有個 text overflow ellipsis 這個的作用是當你定義了元素的寬度時,如果元素裡的文字內容超出定義的寬度,則會在文字末尾顯示 這樣文字 鏈結 列表會看起來整齊美觀,可惜的是 目前只有 ie 完美支援這個屬性,其它瀏覽器均不支援。為解決這個問題,google 了...