概述
模板设计
顺序查找:遍历整个元素序列,逐个元素与要查找的元素进行比较,若其中有某个元素与该值相等,则查找成功(返回该元素的下标),若遍历完了整个序列,都没有找到与之相等的元素,则返回-1。
二分查找:对元素序列进行排序,排序之后,将要查找的值与排序的中间值比较,小于中间值,则到左边查找,大于中间值,到右边查找,递归循环,直到最终找到该值,返回它的下标或者查找序列中只剩下一个值,但它与要查找的值不相等,返回-1。
功能介绍
代码
main.cpp
#include<iostream>
#include"search.h"
int main()
{
cout<<"创建一个数组a"<<endl;
cout<<"数组的元素为:{1,5,3,6,9}"<<endl;
cout<<endl;
int a[] = {1,5,3,6,9};
cout<<"顺序查找 3 "<<endl<<"若3在数组里,则返回3的位置(从1开始),若不在,则返回 -1"<<endl;
int cur = search(a, 3);
cout<<"输出结果:"<<cur<<endl;
cout<<endl;
cout<<"二分查找 7"<<endl<<"若7在数组里,则返回7的位置(从1开始),若不在,则返回 -1"<<endl;
cur = binary_search(a,7);
cout<<"输出结果:"<<cur<<endl;
return 0;
}
/*
search(T a,int b)
binary_search(T a,int b)
*/
search.h
#include<iostream>
#include<algorithm>
using namespace std;
template <typename T> int getsize(T &array)
{
return sizeof(array)/sizeof(array[0]);
}
template <typename T> int search(T &a,int b)
{
int len = getsize(a);
int cur = -1;
for(int i=0;i<len;i++)
if(a[i] == b) cur = i+1;
return cur;
}
template <typename T> int binary_search(T &a,int b)
{
int len = getsize(a);
int *d
= a ;
sort(d,d+len);
// for(int i=0;i<len;i++)
//
cout<<d[i]<<" ";cout<<endl;
int cur = -1;
int low = 0,high = len-1;
while(low<high)
{
int mid = (int)(low +high)/2;
//
cout<<"mid:"<<mid<<endl;
//
cout<<"b:"<<b<<" "<<d[mid]<<endl;
if(b == d[mid]) {
cur = mid; break;}
else if(b < d[mid])
low = mid;
else high = mid;
}
return cur;
}
测试结果
最后
以上就是阳光乌冬面为你收集整理的函数模板实现查找算法(顺序查找、二分查找)模板设计功能介绍代码测试结果的全部内容,希望文章能够帮你解决函数模板实现查找算法(顺序查找、二分查找)模板设计功能介绍代码测试结果所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复