7 1 二分查詢法之過程 15分

2021-10-04 01:40:05 字數 1289 閱讀 8074

本題要求使用二分查詢法,在給定的n個公升序排列的整數中查詢x,並輸出查詢過程中每一步的中間結果。如果陣列a中的元素與x的值相同,輸出相應的下標(下標從0開始);如果沒有找到,輸出「not found」。如果輸入的n個整數沒有按照從小到大的順序排列,或者出現了相同的數,則輸出「invalid value」。

二分查詢法的演算法步驟描述如下:

設n個元素的陣列a已公升序排列,用left和right兩個變數來表示查詢的區間,即在a[left] 〜 a[right]區間去查詢x。初始狀態為left = 0,right = n-1。首先用要查詢的x與查詢區間的中間位置元素a[mid](mid = (left + right) / 2)比較,如果相等則找到;如果x < a[mid],由於陣列是公升序排列的,則只要在a[left] 〜 a[mid-1]區間繼續查詢;如果x > a[mid],則只要在a[mid+1] 〜 a[right]區間繼續查詢。也就是根據與中間元素比較的情況產生了新的區間值left、right值,當出現left > right時,說明不存在值為x的元素。

輸入格式:

輸入在第1行中給出乙個正整數n(1≤n≤10)和乙個整數x,第2行輸入n個整數,其間以空格分隔。題目保證資料不超過長整型整數的範圍。

輸出格式:

10 2

1 2 3 4 5 6 7 8 9 10

輸出樣例1

[0,9][4]

[0,3][1]

1輸入樣例2:

4 571 74 78 100

輸出樣例2:

[0,3][1]

[0,0][0]

not found

輸入樣例3:

5 539 60 80 80 100

輸出樣例3:

invalid value

#include int main()

,n,x;

scanf("%d %d",&n,&x); //輸入陣列的大小n以及查詢數x

for(i=0;i=n)

else

middle=(left+right)/2;

printf("[%d,%d][%d]\n",left,right,middle);

} if(a[middle]!=x)

else

} return 0;

}

7 1 二分查詢 20分

輸入n值 1 n 1000 n個非降序排列的整數以及要查詢的數x,使用二分查詢演算法查詢x,輸出x所在的下標 0 n 1 及比較次數。若x不存在,輸出 1和比較次數。輸入共三行 第一行是n值 第二行是n個整數 第三行是x值。輸出x所在的下標 0 n 1 及比較次數。若x不存在,輸出 1和比較次數。4...

7 1 二分查詢 20分

利用二分查詢找出所給出的數在陣列中的下標 輸入格式 第一行輸入n和m表示陣列有n個資料,m表示要對m個數進行查詢 輸出格式 所有輸出在一行完成,行末沒有多餘空格和多餘回車。輸入樣例 5 5 1 2 3 4 5 1 2 3 4 5 輸出樣例 0 1 2 3 4 一開始無腦map,啊這,tel。換sca...

7 1 二分查詢 20分

利用二分查詢找出所給出的數在陣列中的下標 第一行輸入n和m表示陣列有n個資料,m表示要對m個數進行查詢 所有輸出在一行完成,行末沒有多餘空格和多餘回車。551 2345 1234 5012 34這個如果使用cin輸入的話,必須加上加速器,否則就會執行超時的。還可以使用scanf輸入,這裡就可以不使用...