題目描述:
設有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...