當前位置:首頁 > 芯聞號 > 充電吧
[導讀]二分查找又稱折半查找,優(yōu)點是比較次數少,查找速度快,平均性能好;其缺點是要求待查表為有序表,且插入刪除困難。因此,折半查找方法適用于不經常變動而查找頻繁的有序列表。首先,假設表中元素是按升序排列,將表

二分查找又稱折半查找,優(yōu)點是比較次數少,查找速度快,平均性能好;其缺點是要求待查表為有序表,且插入刪除困難。因此,折半查找方法適用于不經常變動而查找頻繁的有序列表。首先,假設表中元素是按升序排列,將表中間位置記錄的關鍵字與查找關鍵字比較,如果兩者相等,則查找成功;否則利用中間位置記錄將表分成前、后兩個子表,如果中間位置記錄的關鍵字大于查找關鍵字,則進一步查找前一子表,否則進一步查找后一子表。重復以上過程,直到找到滿足條件的記錄,使查找成功,或直到子表不存在為止,此時查找不成功。

前提:數組必須是有序的。

算法時間復雜度:O(log(n))

二分查找法也稱為折半查找法,它充分利用了元素間的次序關系,采用分治策略,可在最壞的情況下用O(log n)完成搜索任務。它的基本思想是,將n個元素分成個數大致相同的兩半,取a[n/2]與欲查找的x作比較,如果x=a[n/2]則找到x,算法終止。如 果x

總之,二分查找算法的思想就跟二叉樹的查找一樣,如果大于就在右邊找,小于就在左邊找,等于就表示找到了。這里的結果我使用的是返回數組的下標,如果沒有找到則返回-1。代碼如下:

1.遞歸法二分查找


//?遞歸二分查找
	public?static?int?binarySearch(Integer?array[],?int?key,?int?left,?int?right)?{
		int?center?=?left?+?(right?-?left)?/?2;?//?防止用(left+right)/2時left+high溢出
		if?(array[center]?==?key)?{
			System.out.println("找到了");
			return?center;
		}?else?if?(array[center]?<?key)?{
			return?binarySearch(array,?key,?center?+?1,?right);
		}?else?if?(array[center]?>?key)?{
			return?binarySearch(array,?key,?left,?center?-?1);
		}
		return?-1;
	}


2.非遞歸二分查找


//?非遞歸二分查找
	public?static?int?binarySearch1(Integer?array[],?int?key)?{
		int?left?=?0,?right?=?array.length-1;
		int?mid?=?-1;
		while?(left?>?1);
			if?(key?==?array[mid])?{
				return?mid;
			}?else?if?(key?<?array[mid])?{
				right?=?mid-1;
			}?else?{
				left?=?mid?+?1;
			}
		}
		return?-1;
	}


測試


	public?static?void?main(String[]?args)?{
		Integer?array[]?=?{?1,?2,?3,?4,?5,?6,?7,?8,?9,?10?};
//		System.out.println(binarySearch(array,?2,?0,?array.length));
		System.out.println(binarySearch1(array,?5));
	}


結果:4

表示找到了元素5,并在下標為4的地方。


附:C++代碼


int?binarySearch(vector&array,int?key){
????int?left?=?0,right?=?array.size()-1;
????int?mid?=?-1;
????while?(left?>?1);??//得到的是向下取整,如0,9的為4
????????cout<<mid<<endl;
????????if?(key?==?array[mid])?{
????????????return?mid;
????????}?else?if?(key?<?array[mid])?{
????????????right?=?mid-1;
????????}?else?{
????????????left?=?mid+1;
????????}
????}
????return?-1;
}
本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內容真實性等。需要轉載請聯系該專欄作者,如若文章內容侵犯您的權益,請及時聯系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或將催生出更大的獨角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數字化轉型技術解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關鍵字: AWS AN BSP 數字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術公司SODA.Auto推出其旗艦產品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關鍵字: 汽車 人工智能 智能驅動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務中斷的風險,如企業(yè)系統復雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務連續(xù)性,提升韌性,成...

關鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據媒體報道,騰訊和網易近期正在縮減他們對日本游戲市場的投資。

關鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數據產業(yè)博覽會開幕式在貴陽舉行,華為董事、質量流程IT總裁陶景文發(fā)表了演講。

關鍵字: 華為 12nm EDA 半導體

8月28日消息,在2024中國國際大數據產業(yè)博覽會上,華為常務董事、華為云CEO張平安發(fā)表演講稱,數字世界的話語權最終是由生態(tài)的繁榮決定的。

關鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應對環(huán)境變化,經營業(yè)績穩(wěn)中有升 落實提質增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務引領增長 以科技創(chuàng)新為引領,提升企業(yè)核心競爭力 堅持高質量發(fā)展策略,塑強核心競爭優(yōu)勢...

關鍵字: 通信 BSP 電信運營商 數字經濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術學會聯合牽頭組建的NVI技術創(chuàng)新聯盟在BIRTV2024超高清全產業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現場 NVI技術創(chuàng)新聯...

關鍵字: VI 傳輸協議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯合招商會上,軟通動力信息技術(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關鍵字: BSP 信息技術
關閉
關閉