#include<iostream>
using namespace std;
template<typename TYPE>
int binarySearch(TYPE *array, int lenght,TYPE key)//不适用于char ** 类型
{
int mid = 0;
int left = 0;
int right = lenght - 1;
while (left <= right)
{
mid = (right - left) / 2 + left;// 一分为二,这种分法可以防止数据溢出
if (array[mid] == key)//在当前程序中只能牺牲部分效率,必须先判断
{
return mid;
}
array[mid] > key ? right = mid - 1 : left = mid + 1;
}
return -1;
}
int main()
{
int a[10] = { 1, 4, 5, 6, 8, 9, 12, 23, 34, 45 };//测试整形
cout << binarySearch(a, sizeof(a) / sizeof(a[0]), -89)<<endl;
cout << binarySearch(a, sizeof(a) / sizeof(a[0]), 0) << endl;
cout << binarySearch(a, sizeof(a) / sizeof(a[0]), 9) << endl;
cout << binarySearch(a, sizeof(a) / sizeof(a[0]), 1) << endl;
cout << binarySearch(a, sizeof(a) / sizeof(a[0]), 45) << endl;
cout << binarySearch(a, sizeof(a) / sizeof(a[0]), 3) << endl<<endl;
char b[12] = { "acdeghmnrst" };//测试字符形
cout << binarySearch(b, sizeof(b) / sizeof(b[0]), 'j') << endl;
cout << binarySearch(b, sizeof(b) / sizeof(b[0]), 'f') << endl;
cout << binarySearch(b, sizeof(b) / sizeof(b[0]), 't') << endl;
cout << binarySearch(b, sizeof(b) / sizeof(b[0]), 'n') << endl;
cout << binarySearch(b, sizeof(b) / sizeof(b[0]), 'a') << endl<<endl;
double c[10] = { 12.3, 34.23, 45.2, 56.24, 67.3, 78.2, 89.12, 90.12, 123.4,234.4 };//测试double
cout << binarySearch(c, sizeof(c) / sizeof(c[0]), 0.0) << endl;
cout << binarySearch(c, sizeof(c) / sizeof(c[0]),12.3) << endl;
cout << binarySearch(c, sizeof(c) / sizeof(c[0]), 34.23) << endl;
cout << binarySearch(c, sizeof(c) / sizeof(c[0]), 45.3) << endl;
cout << binarySearch(c, sizeof(c) / sizeof(c[0]), 234.4) << endl<<endl;
string d[6] = { "abc", "def", "ghi", "opq", "rst", "uvw" };//测试double
string key = "uvw";//这里只有定义一个string型变量,如若在参数里直接写,会把它解析为const char* 类型,在当前的函数中会出错
cout << binarySearch(d, sizeof(d) / sizeof(d[0]), key) << endl;
return 0;
}
折半查找法(仅适用于已排好顺序)
最新推荐文章于 2024-11-12 11:25:23 发布