二分法查詢 BinarySearch

2021-06-21 10:34:59 字數 1656 閱讀 7657

前幾天參加2014阿里巴巴春季校招(測試開發崗)筆試, 裡面有一道改錯題, 就是給了乙個binary_search的**. 結果這麼基礎的一題我還是沒能答全對. 悲劇悲劇, 這個水平注定去不了阿里...現在開始亡羊補牢.

演算法: binarysearch

輸入: 陣列a, 起始索引begin, 結束索引end, 所查詢值value

輸出: 若找到則返回value在a中索引, 否則返回-1.

後面兩個版本的二分法都能通過以下用例:

0. a == null

1. 邊界值, 即begin和end

2. 最後會剩兩個數min, max. 查詢key, key == min

3. 最後會剩兩個數min, max. 查詢max, key == max

4. 最後會剩兩個數min, max. 查詢key, key < min

5. 最後會剩兩個數min, max. 查詢key, min < key < max

6. 最後會剩兩個數min, max. 查詢key, key > max

如果有高人發現不能通過的用例還求不吝賜教. 跪謝.

自己先寫乙個:

int binarysearch(int* a, int begin, int end, int value) else 

} return -1;

}

int binarysearchbop(int* arr, int begin, int end, int val) else 

} if(arr[minindex] == val) else if(arr[maxindex] == val) else

}

#include #include using namespace std;

typedef int (*bsfuncpointer)(int*, int, int, int);

int binarysearch(int* a, int begin, int end, int value) else

} return -1;

}int binarysearchbop(int* arr, int begin, int end, int val) else

} if(arr[minindex] == val) else if(arr[maxindex] == val) else

}void test_binarysearch(bsfuncpointer binarysearch, int* a, int length, int value, int expectedresult) else

}void test(bsfuncpointer func, const char* funcname, int* arr, int length)

int main(); // 11個元素

int length = sizeof(arr) / sizeof(int);

test(binarysearch, "binarysearch", arr, length);

test(binarysearchbop, "binarysearchbop", arr, length);

system("pause");

return 0;

}

C 二分法查詢,遞迴二分法

用二分法來求需要查詢的值.includeusing namespace std 查詢key元素是否存在 int findkey const int buf 100 const int ilen,const int key else right left mid 1 查詢失敗 return 1 查詢k...

python二分法查詢 Python 二分法查詢

二分法查詢主要的作用就是查詢元素 lst 1,3,5,7,12,36,68,79 資料集 百萬級資料 num int input 請輸入你要查詢的元素資訊 for el in lst if num el print 存在 break else print 不存在 len lst 0 1 2 3 4 ...

二分法查詢

前幾天csdn上說只有10 程式設計師能寫出正確的二分法查詢 so.我在看過二分法查詢方法後寫了乙個 一次測試成功.範圍 需要次數 10 4 100 7 1000 10 10000 14 100000 17 1000000 20 除了對特別小的陣列外,二分法查詢表現是非常優秀的.每次對範圍加倍可以建...