折半查找法(仅适用于已排好顺序)

本文详细介绍了C++模板二分查找算法的实现过程,并通过整型数组、字符数组和double数组的查找实例展示了其在不同数据类型中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值