簡單遞迴 二分法查詢

2021-06-23 00:28:00 字數 774 閱讀 6060

題目描述:

設有n個數已經按從大到小的順序排列,現在輸入x,判斷它是否在這n個數中,如果存在則輸出:「yes」 否則輸出「no」。

題目分析:

該問題屬於資料的查詢問題,資料查詢有多種方法,通常方法是:順序查詢和二分查詢,當n個數排好序時,用二分查詢方法速度大大加快。二分查詢演算法:

(1) 設有n個數,存放在a陣列中,待查詢數為x,用l指向資料的高階,用r指向資料的低端,mid指向中間:

(2) 若x=a[mid] 輸出 「yes」;

(3)若x

(4) 若x>a[mid]則到資料前半段查詢:l不變,r=mid-1,計算新的mid值,並進行新的一段查詢;

(5)若l>r都沒有查詢到,則輸出「no」。

該演算法符合遞迴程式設計的基本規律,可以用遞迴方法設計。

我的**:

#include

int a[100];

int search(int h,int l,int n)

{  int mid;

mid=(h+l)/2;

if(h>l)     //臨界條件 ,當h>l時表示未找到要查詢的數

return 0;

else

{if(a[mid]==n)

return 1;

else if(a[mid]>n)   //當a[mid]>n時將不再查詢 h到mid範圍內的數,轉向查詢mid+1到 l範圍的數

return search(mid+1,l,n);

else if(a[mid]

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 ...

二分法查詢 遞迴

需求 查詢陣列中某個元素的下標 實現方法 二分法查詢 折半查詢,每次把錶分成兩半,因為已經排好序,所以每次只需要和中間的數比較,就能確定要查詢的值在哪一半,然後不斷分成兩半,直到匹配,如果沒有找到,則表示沒有該元素 public static int find int x int min 0 int...