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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

算法图解之二分查找

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

簡單查找,如下圖:

?

從圖可知那個眼鏡男從1開始猜,猜到100,大家都知道這種猜法最終都會得到答案,就是時間問題而已。100畢竟是這個列表的最大長度。但是換言之,如果是一萬、百萬、上千億呢?那么這種猜法雖然能夠得到答案,但是時間方面的成本將會非常大。于是二分法應需而生。

二分法,如下圖:

從圖可知這次眼鏡男學聰明了,從中間入手一分為二。以100為例猜大小,假定要猜的數字為65,這時眼鏡男說50,于是小姐姐說小了,眼鏡男再猜70,小姐姐說大了,這時眼鏡男可以肯定的范圍應該在51~69這個范圍內,相比簡單查找,這種方式效率要高的多。最終眼鏡男肯定會猜到正確的數字,花費的時間與簡單查找相比,花費時間肯定是很少的。

二分法也有其局限性,局限性就是必須要確保列表是有序的才行。

以代碼來講解:
簡單查找,以數組為例,索引從0開始

@Testpublic void testSelect() throws Exception {int [] num = new int[] {1,2,3,4,5,6};for (int i = 0; i < num.length; i++) {System.out.println(num[i]);}}

二分法,例子如下:

@Testpublic void testSelect() throws Exception {int[] num = new int[] {1,3,5,7,9,11};int start = 0;int end = num.length - 1;int i = 14;while(true) {int mid = (start+end) / 2;if(i == num[mid]) {System.out.println("index:"+mid);break;}else {if(i < num[mid]) {end = mid - 1;}else {start = mid + 1;}}if(start > end) {System.out.println("no find,will insert in:"+start);break;}}}

?

轉載于:https://www.cnblogs.com/youcong/p/10852439.html

總結

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

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