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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

二分法查找算法

發布時間:2025/3/11 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 二分法查找算法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

二分法查找索引值

二分法查找算法步驟:(前提:查詢數組為一組有序數)
1、定義低位和高位指針low,high;
2、通過判斷low和high的所指的數值中間值mid來判斷關鍵值是在高位段還是低位段。

例題解析:
查找5的索引值
sum = {1,2,3,4,5,6,7,8,9,10}

代碼的非遞歸實現:

/*** 非遞歸方法* 時間復雜度T(n)=O(n)* 空間復雜度S(n)=O(1)* @return*/public static int search(int [] arr,int key){//定義low與high的值int low=0;int high=arr.length-1;//利用折半查找查找索引值while(low <= high){//確定mid的值int mid=(low+high)>>1;if(key==arr[mid])return mid;else if(key<arr[mid])high=mid-1;elselow=mid+1;}return -1;}

二分查找易錯的地方

  • 循環退出的條件

    注意是low <= high,而不是low<high.

  • mid的取值

    如果寫成 mid (low+high)/2是有問題,如果low和high比較大,兩者的和可能會溢出改進的方案low+(high-low)/2,但是計算機位運算比除法快,故可改成low+((high-low)>>1)

  • 代碼的遞歸實現:

    /*** 遞歸方法* 時間復雜度T(n)=O(log2(n))* 空間復雜度S(n)=O(log2(n))*/public static int search1(int arr[],int key){//定義low與high的值int low=0;int high=arr.length-1;return sreach(arr,key,low,high);}public static int sreach(int arr[],int key,int low,int high){int mid=(low+high)/2;if(key==arr[mid])return mid;if(low>high)return -1;else if(key<arr[mid])return sreach(arr,key,low,mid-1);elsereturn sreach(arr,key,mid+1,high);}

    總結

    以上是生活随笔為你收集整理的二分法查找算法的全部內容,希望文章能夠幫你解決所遇到的問題。

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