演算法提高 二分法查詢陣列元素

2021-10-22 17:26:34 字數 1408 閱讀 2761

資源限制

時間限制:1.0s 記憶體限制:256.0mb

問題描述:

用遞迴函式實現二分法查詢陣列元素。

補充:要求給定陣列採用如下**定義

int data[200];

for (i=0; i<200; i++)

data[i]=4*i+6;

輸入格式:

輸入乙個待查詢的整數(該整數一定在陣列data中)。

輸出格式:

該整數在陣列中的指標。

樣例輸入:

乙個滿足題目要求的輸入範例。

例1:262

例2:438

例3:774

樣例輸出:

與上面的樣例輸入對應的輸出。

例1:64

例2:108

例3:192

資料規模和約定:

輸入資料中每乙個數的範圍。

輸入資料必須滿足4*i+6,i=0,1,2,3,…,198,199。

我的**如下:

#include

using

namespace std;

intfind

(int a,

int key,

int low,

int high)

intmain()

cin >> n;

cout <<

find

(data, n,0,

200)

;// 輸出遞迴查詢後的結果

return0;

}

具體解析**區有注釋,應該可以看懂,比較簡單。

二分法查詢

適用範圍:二分法查詢適用於資料量較大時,但是資料需要先排好順序。

主要思想:(設查詢的陣列區間為array[low, high])

(1)確定該區間的中間位置k

(2)將查詢的值t與array[k]比較。若相等,查詢成功返回此位置;否則確定新的查詢區域,繼續二分查詢。區域確定如下:a.array[k]>t 由陣列的有序性可知array[k,k+1,……,high]>t;故新的區間為array[low,……,k-1]b.array[k]時間複雜度為:o(log2n)。

(****於網路,如侵刪)

藍橋杯 演算法提高 二分法查詢陣列元素

問題描述 用遞迴函式實現二分法查詢陣列元素。補充 要求給定陣列採用如下 定義 int data 200 for i 0 i 200 i data i 4 i 6 輸入格式 輸入乙個待查詢的整數 該整數一定在陣列data中 輸出格式 該整數在陣列中的指標。樣例輸入 乙個滿足題目要求的輸入範例。例1 2...

陣列元素的查詢 二分法查詢

1 2 二分法查詢演算法是基於排序的基礎之上 類庫中好像有 3 利用二分法對陣列元素程序查詢111 下標為0 222,333,444,555,666,777,888 4 查詢原理 5 找666這個元素的下標,此元素下標是5.6 陣列元素的下標為0 7 7 通過二分法查詢 0 7 2 中間元素下標 3...

查詢演算法 二分法

二分查詢演算法的基本思想 一.首先確定該區間的中間元素位置 mid low high 2 mid代表區間內中間元素的位置 low代表區間內最左邊元素的位置 high代表區間內最右邊元素的位置 二.將待查key元素值與中間元素mid的值 array mid 比較,如果相等,則查詢成功,否則確定新的查詢...