国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語(yǔ)言|JavaScript|易語(yǔ)言|vb.net|

香港云服务器
服務(wù)器之家 - 編程語(yǔ)言 - Java教程 - 兩種java實(shí)現(xiàn)二分查找的方式

兩種java實(shí)現(xiàn)二分查找的方式

2022-01-20 01:01小明同學(xué)YYDS Java教程

這篇文章主要給大家分享的是java實(shí)現(xiàn)二分查找的方式,二分查找是一種查詢效率非常高的查找算法。又稱折半查找。下面文章我們介紹了兩種方法,需要的朋友可以參考一下

起初在數(shù)據(jù)結(jié)構(gòu)中學(xué)習(xí)遞歸時(shí)實(shí)現(xiàn)二分查找,實(shí)際上不用遞歸也可以實(shí)現(xiàn),畢竟遞歸是需要開(kāi)辟額外的空間的來(lái)輔助查詢。本文就介紹兩種方法

 

1、二分查找算法思想

有序的序列,每次都是以序列的中間位置的數(shù)來(lái)與待查找的關(guān)鍵字進(jìn)行比較,每次縮小一半的查找范圍,直到匹配成功。

一個(gè)情景:將表中間位置記錄的關(guān)鍵字與查找關(guān)鍵字比較,如果兩者相等,則查找成功;否則利用中間位置記錄將表分成前、后兩個(gè)子表,如果中間位置記錄的關(guān)鍵字大于查找關(guān)鍵字,則進(jìn)一步查找前一子表,否則進(jìn)一步查找后一子表。重復(fù)以上過(guò)程,直到找到滿足條件的記錄,使查找成功,或直到子表不存在為止,此時(shí)查找不成功。

 

2、二分查找圖示說(shuō)明

圖片來(lái)源百度圖片:

兩種java實(shí)現(xiàn)二分查找的方式

 

3、二分查找優(yōu)缺點(diǎn)

優(yōu)點(diǎn):

比較次數(shù)少,查找速度快,平均性能好;

缺點(diǎn):

是要求待查表為有序表,且插入刪除困難。

因此,折半查找方法適用于不經(jīng)常變動(dòng)而查找頻繁的有序列表。

使用條件:

查找序列是順序結(jié)構(gòu),有序。

 

3、java代碼實(shí)現(xiàn)

3.1 使用遞歸實(shí)現(xiàn)

/**
* 使用遞歸的二分查找
*title:recursionBinarySearch
*@param arr 有序數(shù)組
*@param key 待查找關(guān)鍵字
*@return 找到的位置
*/
public static int recursionBinarySearch(int[] arr,int key,int low,int high){

if(key < arr[low] || key > arr[high] || low > high){
 return -1;    
}

int middle = (low + high) / 2;   //初始中間位置
if(arr[middle] > key){
 //比關(guān)鍵字大則關(guān)鍵字在左區(qū)域
 return recursionBinarySearch(arr, key, low, middle - 1);
}else if(arr[middle] < key){
 //比關(guān)鍵字小則關(guān)鍵字在右區(qū)域
 return recursionBinarySearch(arr, key, middle + 1, high);
}else {
 return middle;
} 

}

3.1 不使用遞歸實(shí)現(xiàn)(while循環(huán))

/**
* 不使用遞歸的二分查找
*title:commonBinarySearch
*@param arr
*@param key
*@return 關(guān)鍵字位置
*/
public static int commonBinarySearch(int[] arr,int key){
int low = 0;
int high = arr.length - 1;
int middle = 0;   //定義middle

if(key < arr[low] || key > arr[high] || low > high){
 return -1;    
}

while(low <= high){
 middle = (low + high) / 2;
 if(arr[middle] > key){
  //比關(guān)鍵字大則關(guān)鍵字在左區(qū)域
  high = middle - 1;
 }else if(arr[middle] < key){
  //比關(guān)鍵字小則關(guān)鍵字在右區(qū)域
  low = middle + 1;
 }else{
  return middle;
 }
}

return -1;  //最后仍然沒(méi)有找到,則返回-1
}

3.3 測(cè)試

測(cè)試代碼:

public static void main(String[] args) {

int[] arr = {1,3,5,7,9,11};
int key = 4;
//int position = recursionBinarySearch(arr,key,0,arr.length - 1);

int position = commonBinarySearch(arr, key);

             if(position == -1){
 System.out.println("查找的是"+key+",序列中沒(méi)有該數(shù)!");
}else{
 System.out.println("查找的是"+key+",找到位置為:"+position);
}

}

recursionBinarySearch()的測(cè)試:key分別為0,9,10,15的查找結(jié)果

查找的是0,序列中沒(méi)有該數(shù)!

查找的是9,找到位置為:4

查找的是10,序列中沒(méi)有該數(shù)!

查找的是15,序列中沒(méi)有該數(shù)!

commonBinarySearch()的測(cè)試:key分別為-1,5,6,20的查找結(jié)果

查找的是-1,序列中沒(méi)有該數(shù)!

查找的是5,找到位置為:2

查找的是6,序列中沒(méi)有該數(shù)!

查找的是20,序列中沒(méi)有該數(shù)!

 

4、時(shí)間復(fù)雜度

采用的是分治策略

最壞的情況下兩種方式時(shí)間復(fù)雜度一樣:O(log2 N)

兩種java實(shí)現(xiàn)二分查找的方式

最好情況下為O(1)

 

5、空間復(fù)雜度

算法的空間復(fù)雜度并不是計(jì)算實(shí)際占用的空間,而是計(jì)算整個(gè)算法的輔助空間單元的個(gè)數(shù)

非遞歸方式:
由于輔助空間是常數(shù)級(jí)別的所以:空間復(fù)雜度是O(1);

遞歸方式:遞歸的次數(shù)和深度都是log2 N,每次所需要的輔助空間都是常數(shù)級(jí)別的:

空間復(fù)雜度:O(log2N )

到此這篇關(guān)于兩種java實(shí)現(xiàn)二分查找的方式的文章就介紹到這了,更多相關(guān)java實(shí)現(xiàn)二分查找內(nèi)容請(qǐng)搜索服務(wù)器之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持服務(wù)器之家!

原文鏈接:https://blog.csdn.net/maoyuanming0806/article/details/78176957

延伸 · 閱讀

精彩推薦
  • Java教程20個(gè)非常實(shí)用的Java程序代碼片段

    20個(gè)非常實(shí)用的Java程序代碼片段

    這篇文章主要為大家分享了20個(gè)非常實(shí)用的Java程序片段,對(duì)java開(kāi)發(fā)項(xiàng)目有所幫助,感興趣的小伙伴們可以參考一下 ...

    lijiao5352020-04-06
  • Java教程Java BufferWriter寫(xiě)文件寫(xiě)不進(jìn)去或缺失數(shù)據(jù)的解決

    Java BufferWriter寫(xiě)文件寫(xiě)不進(jìn)去或缺失數(shù)據(jù)的解決

    這篇文章主要介紹了Java BufferWriter寫(xiě)文件寫(xiě)不進(jìn)去或缺失數(shù)據(jù)的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望...

    spcoder14552021-10-18
  • Java教程升級(jí)IDEA后Lombok不能使用的解決方法

    升級(jí)IDEA后Lombok不能使用的解決方法

    最近看到提示IDEA提示升級(jí),尋思已經(jīng)有好久沒(méi)有升過(guò)級(jí)了。升級(jí)完畢重啟之后,突然發(fā)現(xiàn)好多錯(cuò)誤,本文就來(lái)介紹一下如何解決,感興趣的可以了解一下...

    程序猿DD9332021-10-08
  • Java教程Java實(shí)現(xiàn)搶紅包功能

    Java實(shí)現(xiàn)搶紅包功能

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)搶紅包功能,采用多線程模擬多人同時(shí)搶紅包,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙...

    littleschemer13532021-05-16
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    這篇文章主要介紹了Java使用SAX解析xml的示例,幫助大家更好的理解和學(xué)習(xí)使用Java,感興趣的朋友可以了解下...

    大行者10067412021-08-30
  • Java教程Java8中Stream使用的一個(gè)注意事項(xiàng)

    Java8中Stream使用的一個(gè)注意事項(xiàng)

    最近在工作中發(fā)現(xiàn)了對(duì)于集合操作轉(zhuǎn)換的神器,java8新特性 stream,但在使用中遇到了一個(gè)非常重要的注意點(diǎn),所以這篇文章主要給大家介紹了關(guān)于Java8中S...

    阿杜7482021-02-04
  • Java教程小米推送Java代碼

    小米推送Java代碼

    今天小編就為大家分享一篇關(guān)于小米推送Java代碼,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧...

    富貴穩(wěn)中求8032021-07-12
  • Java教程xml與Java對(duì)象的轉(zhuǎn)換詳解

    xml與Java對(duì)象的轉(zhuǎn)換詳解

    這篇文章主要介紹了xml與Java對(duì)象的轉(zhuǎn)換詳解的相關(guān)資料,需要的朋友可以參考下...

    Java教程網(wǎng)2942020-09-17
720
主站蜘蛛池模板: 国产成人毛片 | 国产精品久久国产精品 | 都市激情 亚洲 | 毛片一卡 | 成人午夜视频免费 | av在线播放不卡 | 亚洲精品无 | 久久国产一区二区 | 亚洲国产中文字幕 | 一区二区三区在线 | av中文字幕在线播放 | 日韩欧美在线观看视频 | 久久99亚洲精品 | 天天综合天天做天天综合 | 高清视频一区 | 免费一级欧美在线观看视频 | 福利片在线 | www.久久久.com | 黄色精品网站 | 手机看片在线 | 伊人网在线 | 欧美高清成人 | 在线无码| 99成人| 黄色免费视频 | 永久黄网站色视频免费 | 91精品国产综合久久久久久 | 亚洲视频一区在线播放 | 欧美1页| 久草视频网 | 欧美成人精品在线 | 在线91视频 | 久久久国产视频 | 无码日韩精品一区二区免费 | 免费av大全 | 国产精品亚洲一区二区三区 | 国产区视频在线观看 | av伊人网 | 欧美激情亚洲 | 精品国产不卡一区二区三区 | 国产精品美女久久久久久久网站 |