C 改寫二分搜尋演算法

2021-08-29 02:52:10 字數 1183 閱讀 4748

設a[0:n-1]是已排好序的陣列,請改寫二分搜尋演算法,使得當x不在陣列中時,返回小於x的最大元素位置i和大於x的最小元素位置j。當搜尋元素在陣列中時,i和j相同,均為x在陣列中的位置。

輸入格式:

輸入有兩行:

第一行是n值和x值; 第二行是n個不相同的整數組成的非降序序列,每個整數之間以空格分隔。

輸出格式:

輸入樣例:

在這裡給出一組輸入。

例如:6 5

2 4 6 8 10 12

輸出樣例:

在這裡給出相應的輸出。

例如:1 2

#includeusing namespace std;

int changebinarysearch(int a, int left, int right,int x)

while(left < right)

if(x < a[mid]) return changebinarysearch(a, left, mid-1, x);

if(x > a[mid]) return changebinarysearch(a, mid+1, right, x);

} }int main()

if(x < a[0])

cout << -1 << " " << 0 << endl;

if(x == a[0])

cout << 0 << endl;

else changebinarysearch(a, 0, n-1, x);

return 0;

}

執行結果:

在pta上面執行是部分正確,顯示查詢最後乙個數和查詢第乙個數的答案錯誤,但是我自己執行的時候是可以顯示第乙個和最後乙個,請問是什麼問題嗎?

改寫二分搜尋演算法

1 實踐題目 7 2 改寫二分搜尋演算法 2.問題描述 3.演算法描述 不能貼上程式 在基本的二分查詢裡面做改進,滿足題目要求。一開始我是對越底界,越高界,直接找得到,以及在兩者之間四個情況分開來寫,但是覺得這種方法不好。後來改進的話就直接對low和high兩個指標進行操作。在二分迴圈while l...

改寫二分搜尋演算法

一 實踐題目 改寫二分搜尋演算法 二 問題描述 設a 0 n 1 是已排好序的陣列,請改寫二分搜尋演算法,使得當x不在陣列中時,返回小於x的最大元素位置i和大於x的最小元素位置j。當搜尋元素在陣列中時,i和j相同,均為x在陣列中的位置。輸入格式 輸入有兩行 第一行是n值和x值 第二行是n個不相同的整...

改寫二分搜尋演算法

設a 0 n 1 是已排好序的陣列,請改寫二分搜尋演算法,使得當x不在陣列中時,返回小於x的最大元素位置i和大於x的最小元素位置j。當搜尋元素在陣列中時,i和j相同,均為x在陣列中的位置。輸入格式 輸入有兩行 第一行是n值和x值 第二行是n個不相同的整數組成的非降序序列,每個整數之間以空格分隔。輸入...