c和c++的一些训练题(11)(二分查找法和顺序查找法)

问题的提出:编写程序对数据序列采用二分查找法和顺序查找法查找元素的下标,,要求使用类模板实现(其中二分法查找算法要求用递归实现,给定数据序列有序)。

代码:

// test12_1.cpp : 定义控制台应用程序的入口点。//利用二分查找和顺序查找元素的下标,类模板实现且二分类查找算法要求利用递归算法#include "stdafx.h"#include <iostream>using namespace std;//const int Max=100;template<typename T>class Search{private:T *A;int n;public:Search(){}Search(T *a, int n){A=a;this->n=n;}void disp();int seek(T *a, int n, T e);int seek1(T *a, int start, int end, T e);};template<typename T>void Search<T>::disp(){for(int i=0; i<n; i++){cout<<A[i]<<" ";}cout<<endl;}template<typename T>int Search<T>::seek(T *a, int n, T e){//顺序查找法for(int i=0; i<n; i++){if(a[i]==e){return (i+1);}}return -1;}template<typename T>int Search<T>::seek1(T *a, int start, int end, T e){//二分查找法int mid;mid=(start+end)/2;if(e>a[mid]){return seek1(a,mid+1,end,e);}else if(e<a[mid]){return seek1(a,start,mid-1,e);}else{return mid;}return -1;}int _tmain(int argc, _TCHAR* argv[]){//二分查找法int a[]={1,2,3,4,5,6,7,8,9,10};Search<int> Num(a,10);cout<<"原始数据集: ";Num.disp();cout<<"请输入你要查找的元素:";int e;cin>>e;int p1=Num.seek1(a,0,9,e);if(p1==-1){cout<<"你输入的元素不存在!"<<endl;}else{cout<<"元素"<<e<<"在第"<<p1+1<<"个位置"<<endl;}//顺序查找法char b[]="bdaolfjmsx";Search<char> Character(b,10);cout<<"原始数据集: ";Character.disp();cout<<"请输入你要查找的元素:";char c;cin>>c;int p = Character.seek(b,10,c);if(p==-1){cout<<"你输入的元素不存在!"<<endl;}else{cout<<"元素"<<c<<"在第"<<p<<"个位置"<<endl;}system("pause");return 0;}结果:

与其在那里苦苦挣扎,碍于面子硬撑,倒不如微笑着面对,

c和c++的一些训练题(11)(二分查找法和顺序查找法)

相关文章:

你感兴趣的文章:

标签云: