二分法的簡單實現 遞迴和非遞迴

2021-09-13 15:53:55 字數 915 閱讀 7875

//非遞迴實現二分法

public class jianzhi;

int m = find(num , 5) ;

system.out.println(m);

}public static int find(int list , int m )else if(list.length ==1 )else else if (list[mid]m)

}system.out.println("未在陣列中找到數字"+m);

}return -1 ;

}}

//注意: 1.需要把mid放入迴圈中,不能放在迴圈體外,因為每次都要把mid賦值給left或者right如果放在外面每次賦值的數都一樣會死迴圈。

// 2.寫二分法時需要判斷迴圈何時終止,如果每次都是left=mid,right=mid,會導致迴圈無法終止

// ,所以此處用了left=mid+1 right=mid-1 。這樣做還有乙個好處:發現mid不是所要找的數時,就直接捨棄,讓left和right不指向這個節點。

//遞迴實現二分法

public class jianzhi

if(list.length == 1 )

if(begin > end)

int mid = (begin + end) / 2 ;

if(list[mid] == m)else if (list[mid] < m )else if (list[mid] > m )

return -1 ;

}public static void main (string args);

int m = find(num , 1,0,num.length-1) ;

system.out.println(m);

}}

簡單遞迴 二分法查詢

題目描述 設有n個數已經按從大到小的順序排列,現在輸入x,判斷它是否在這n個數中,如果存在則輸出 yes 否則輸出 no 題目分析 該問題屬於資料的查詢問題,資料查詢有多種方法,通常方法是 順序查詢和二分查詢,當n個數排好序時,用二分查詢方法速度大大加快。二分查詢演算法 1 設有n個數,存放在a陣列...

C 二分法查詢,遞迴二分法

用二分法來求需要查詢的值.includeusing namespace std 查詢key元素是否存在 int findkey const int buf 100 const int ilen,const int key else right left mid 1 查詢失敗 return 1 查詢k...

遞迴二分法查詢

二分法使用了折半查詢的思想,不斷的變化,陣列下標的起始位置 begin 和終止位置 end 來進行搜尋。我們使用兩種演算法,解決二分查詢 public class solution system.out.println solution.sort number,0,number.length,56 ...