二分查找法就是對一個從小到大排好序的數組中尋找一個數val,先用待找的數val和中間值比較,如果比中間值大,那麼在中間值右邊尋找;如果比中間值小,那麼在中間值左邊尋找。一直遞歸下去。知道找到val。如果沒找到,則輸出在序列裡面沒有相關的數據。
package com.PengRong.A;
public class BinaryFind {
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] arr ={1, 5, 9 ,56, 78, 80, 85, 99};//注意這裡需要數組按從小到大排好序。
//如果數據比較多,需要先用排序算法排好序才能使用二分查找發
BinFind binfin =new BinFind();
binfin.binaryFind(0, arr.length-1, 85, arr);
}
}
class BinFind
{
/**
* @author PengRong
* @param left 數組左下標
* @param right 數組又下標
* @param arr 數組引用
* @param val 待找的數
* @功能:實現在一堆數中找是否有val數,調用這個二分查找法前提是這個序列arr是有序的
*/
public void binaryFind(int left, int right, int val,int [] arr)
{
//二分查找其實就是遍歷數組,一定要使得左邊下標不大於右邊下標
if(left <= right)
{
//找到中間數
int pivot =arr[(left+right)/2];
//如果要找的數比中間值小,在中間值左邊尋找
if(val < pivot)
{
binaryFind( left, (left + right)/2-1, val, arr);
}else if(val > pivot)
//如果要找的數比中間值大,在中間值右邊尋找
{
binaryFind( (left + right)/2 +1, right, val, arr);
}else if(val == pivot)
{
System.out.println("在數組序列中找到了"+val+"這個數,它的下標是:"+( (left+right)/2 ) );
}
}
else
{
System.out.println("很遺憾你所找的數在數組序列中沒有");
}
}
}