JAVA 二分法尋找實現

來源:互聯網
上載者:User

package junit.test;<br />/**<br /> * 二分法尋找,必須對已經排好序的序列進行尋找,假設現在有一個遞增序列,取中間位置的數及序號midIndex=(beginIndex+endIndex)/2,<br /> * 然後將一個序列折成兩半,beginIndex~midIndex,midIndex~endIndex,如果目標數T等於S[midIndex],找到,<br /> * 否則,如果T<S[midIndex],則在beginIndex~midIndex中繼續尋找;如果T>S[midIndex],則在midIndex~endIndex<br /> * 中繼續尋找,如此反覆進行,直到找到目標資料,<br /> * 初始對傳入參數進行約束及避免無效計算的條件為,T<S[beginIndex]或T>S[endIndex]或beginIndex>endIndex<br /> * 或beginIndex>S.length-1||endIndex>S.length-1||beginIndex<0||endIndex<0<br /> *<br /> */<br />public class BinarySearchTest {<br /> /**<br /> * 找到返回索引下標,否則返回-1;<br /> * @return index<br /> */<br /> public int binarySearch(int dataset[],int target,int beginIndex,int endIndex){<br /> //數組校正<br /> if(dataset==null||dataset.length==0){<br /> return -1;<br /> }<br /> //beginIndex,endIndex校正<br /> if(beginIndex>endIndex||beginIndex>dataset.length-1||endIndex>dataset.length-1||beginIndex<0||endIndex<0){<br /> System.out.println("error arguments!");<br /> return -1;<br /> }</p><p> //無效參數處理<br /> if(target<dataset[beginIndex]||target>dataset[endIndex]||beginIndex>endIndex){<br /> return -1;<br /> }<br /> int midIndex=(beginIndex+endIndex)/2;</p><p> //System.out.println(midIndex);<br /> if(target==dataset[midIndex]){<br /> return midIndex;<br /> }<br /> else if(target<dataset[midIndex]){<br /> return binarySearch(dataset,target,beginIndex,midIndex-1);//注意midIndex-1<br /> }<br /> else{<br /> return binarySearch(dataset,target,midIndex+1,endIndex);//注意midIndex+1<br /> }</p><p> }</p><p> /**<br /> * @param args<br /> */<br /> public static void main(String[] args) {<br /> // TODO Auto-generated method stub<br /> BinarySearchTest bs=new BinarySearchTest();</p><p> int[] data=new int[]{1,3,5,7,9,12};</p><p> int index=bs.binarySearch(data,12,0, 5);</p><p> System.out.println("The position of the target number in the array is :"+ index);<br /> }</p><p>}</p><p>

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.