折半,二分查詢問題

2021-06-28 01:26:40 字數 724 閱讀 8338

乙個迴圈有序陣列(如:3,4,5,6,7,8,9,0,1,2),不知道其最小值的位置,要查詢任一數值的位置。要求演算法時間複雜度為log2(n)。

問題分析:

我們可以把迴圈有序陣列分為左右兩部分(以mid = (low+high)/ 2為界),由迴圈有序陣列的特點知,左右兩部分必有一部分是有序的,我們可以找出有序的這部分,然後看所查詢元素是否在有序部分,若在,則直接對有序部分二分查詢,若不在,對無序部分遞迴呼叫查詢函式。

**如下:

#include using namespace std;

int binsearch(int a,int left,int right,int val)

return -1;

}int seach_c(int a,int left,int right,int val)

int mid = left + (right - left) / 2;

//if find return the pos

if (a[mid] == val) return mid;

if (a[mid] > a[left])

else

}else

else

}}int main()

; cout << seach_c(a, 0, 9, 0) << endl;

return;

}

折半 二分 查詢

遞迴入門 假設表中元素是按公升序排列,將表中間位置記錄的關鍵字與查詢關鍵字比較,如果兩者相等,則查詢成功 否則利用中間位置記錄將表分成前 後兩個子表,如果中間位置記錄的關鍵字大於查詢關鍵字,則進一步查詢前一子表,否則進一步查詢後一子表。重複以上過程,直到找到滿足條件的記錄,使查詢成功,或直到子表不存...

二分查詢(折半查詢)

二分查詢 折半查詢 從有序序列中找到給出的要查詢的數字。原理是 首先把乙個有序序列中間位置的值與要查詢的數比較,若相等則找到了有序序列中的此數 否則比較兩者的大小,若前者大,則把有序序列的中間位置以前的元素都去掉,餘下的元素組成乙個新的有序數列繼續上一步的操作,直到找到為止 若後者大,則把有序數列中...

折半查詢(二分查詢)

折半查詢 又稱二分查詢,優點是比較次數少,查詢速度快,平均效能好 其缺點是要求待查表為有序表,且插入刪除困難。因此,折半查詢方法適用於不經常變動而查詢頻繁的有 序列表。首先,假設表中元素是按公升序排列,將表中間位置記錄的關鍵字與查詢關鍵字比較,如果兩者相等,則查詢成功 否則利用中間位置記錄將表分成前...