日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

二分查找算法的两种实现方式:非递归实现和递归实现

發布時間:2025/6/15 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 二分查找算法的两种实现方式:非递归实现和递归实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

二分查找的條件是對一組有序數組的查找,這一點很容易忘記,在使用二分查找的時候先要對數組進行排序。

先說一下二分查找的思路:一個有序數組,想要查找一個數字key的下標,首先算出中間下標mid,利用mid把這個數組分為兩半,前一半從下標0到mid-1,后一半從mid+1到數組最后一個元素(下標是數組長度減一)。把這個查找的元素key和數組下標為mid的元素進行比較,也就是和中間那個元素進行比較,如果比這個元素的小那么把查找范圍縮小到原數組的前一半(把查找下標縮短到0到mid-1),如果比中間mid下標元素大那么范圍就是后半部分(下標為mid+1到數組長度減一),這樣來回反復取中間比較最后就會定位到要查找元素key的下標。

二分查找有兩種實現方式:

  • 非遞歸實現
  • 遞歸實現
  • 在jdk源碼中Arrays數組工具類中已經封裝好了二分查找算法,不會寫可以看看源碼,源碼實現的方式肯定是效率比較高的。比如計算數組中間下標mid利用移位運算。

    非遞歸實現:

    /*** @param array 操作數組* @param key 查找元素* @return 元素下標*/public static int binSearch(int[] array,int key){int start=0;int mid;int end=array.length-1;while(start<=end){mid=(end-start)/2+start;if(key<array[mid]){end=mid-1;}else if(key>array[mid]){start=mid+1;}else{return mid;}}return -1;}

    ?

    ?

    遞歸實現:

    /*** @param array 操作數組* @param key 查找元素* @param start 開始下標* @param end 結束下標* @return 元素下標*/public static int binSearch1(int[] array,int key,int start,int end){int mid=(end-start)/2+start;if(key==array[mid]){return mid;}else if(start>=end){return -1;}else if(key>array[mid]){return binSearch1(array,key,mid+1,end);}else if(key<array[mid]){return binSearch1(array,key,start,mid-1);}return -1;}

    ?

    總結

    以上是生活随笔為你收集整理的二分查找算法的两种实现方式:非递归实现和递归实现的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。