改寫二分搜尋演算法

2021-09-27 10:12:14 字數 805 閱讀 3686

一、實踐題目:改寫二分搜尋演算法

二、問題描述

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

輸入格式:

輸入有兩行:

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

輸入樣例:

在這裡給出一組輸入。例如:

6 52 4 6 8 10 12

輸出樣例:

在這裡給出相應的輸出。例如:

1 2三、演算法描述

首先分類討論x是屬於以下哪一種情況:

1.小於所有序列的值

2.大於所有序列的值

3.在序列裡

4.不在序列中,但是序列裡分別有最小的大於x的數和最大的小於x的數

對於1、2的情況只需要判斷,然後直接輸出

對於3、4就需要通過遞迴的方式不斷地折半查詢直到找到x

對於4的情況,筆者設計的演算法是在折半查詢的途中,捕捉到是4情況的x

具體**如下:

#include

using namespace std;

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

}int main()

四、演算法時間及空間複雜度

1.時間複雜度

由於是遞迴使用二分查詢演算法,所以時間複雜度為o(logn).,

2.空間複雜度

由於該演算法沒有臨時借用儲存空間,所以空間複雜度為o(1)。

改寫二分搜尋演算法

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個不相同的整數組成的非降序序列,每個整數之間以空格分隔。在這裡給出一組...