当前位置:文档之家› C++源程序顺序查找与二分查找

C++源程序顺序查找与二分查找

一、实验目的1、掌握顺序查找和二分查找方法的基本思想及其实现技术2、了解顺序查找和二分查找方法的优缺点和适用范围二、实验内容(任务、要求或步骤等)【问题描述】实现在有n个元素的顺序表上的顺序查找和二分查找。

【基本要求】(1)编写一个创建函数,建立并输出一个有n个元素的顺序表,数据元素为整型。

顺序表长度和顺序表的各数据元素由键盘输入。

(2)编写函数实现在有n个元素的顺序表上的顺序查找。

(3)编写函数实现在有n个元素的递增有序的顺序表上的二分查找。

(4)提供菜单,供用户选择要执行的操作,根据用户选择调用相应函数实现顺序查找和二分查找三:源程序二分查找如下#include<iostream>using namespace std;struct ssTable{int *elem;int length;} ;void CreatssTable(ssTable &s){int i;cout<<"请输入表长:";cin>>s.length;s.elem=new int[s.length+1];cout<<"\n请输入表中的各个元素";for(i=1;i<=s.length;i++)cin>>s.elem[i];}int SeqSearch(ssTable s,int key){ int i;s.elem[0] = key; // “哨兵”for (i=s.length; s.elem[i]!=key; --i);return i; // 找不到时,i为0}void main (){ssTable s;int x, pos;CreatssTable(s);cout<<"请输入要查找的值";cin>>x;pos=SeqSearch(s,x);if(pos>0)cout<<x<<"位于表中的第"<<pos<<"位置"<<endl; else cout<<"没找到";}折半查找如下#include<iostream>using namespace std;struct ssTable{int *elem;int length;} ;void CreatssTable(ssTable &s){int i;cout<<"请输入表长:";cin>>s.length;s.elem=new int[s.length+1];cout<<"\n请按升序输入表中的各个元素";for(i=1;i<=s.length;i++)cin>>s.elem[i];}int BinSearch(ssTable s,int key){int low,high,mid;low = 1; high = s.length; // 置区间初值while (low <= high) {mid = (low + high) / 2;if (key==s.elem[mid] )return mid; // 找到待查元素else if ( key<s.elem[mid] )high = mid - 1; // 继续在前半区间进行查找else low = mid + 1; // 继续在后半区间进行查找}return 0; // 顺序表中不存在待查元素} // Search_Binvoid main (){ssTable s;int x,pos;CreatssTable(s);cout<<"请输入要查找的值";cin>>x;pos=BinSearch(s,x);if(pos>0)cout<<x<<"位于表中的第"<<pos<<"位置"<<endl; else cout<<"没找到";}二分与折半#include<iostream>using namespace std;struct ssTable{int *elem;int length;} ;void CreatssTable(ssTable &s){int i;cout<<"请输入表长:";cin>>s.length;s.elem=new int[s.length+1];cout<<"\n请输入表中的各个元素";for(i=1;i<=s.length;i++)cin>>s.elem[i];}int SeqSearch(ssTable s,int key){ int i;s.elem[0] = key; // "哨兵"for (i=s.length; s.elem[i]!=key; --i);return i; // 找不到时,i为0}int BinSearch(ssTable s,int key){int low,high,mid;low = 1; high = s.length; // 置区间初值while (low <= high) {mid = (low + high) / 2;if (key==s.elem[mid] )return mid; // 找到待查元素else if ( key<s.elem[mid] )high = mid - 1; // 继续在前半区间进行查找else low = mid + 1; // 继续在后半区间进行查找}return 0; // 顺序表中不存在待查元素} // Search_Binvoid main (){ssTable s;int x, pos;CreatssTable(s);cout<<"请输入要查找的值";cin>>x;pos=SeqSearch(s,x);if(pos>0)cout<<x<<"位于表中的第"<<pos<<"位置"<<endl; else cout<<"没找到";cout<<"\n请按升序输入表中的值:";CreatssTable(s);cout<<"请输入要查找的值";cin>>x;pos=BinSearch(s,x);if(pos>0)cout<<x<<"位于表中的第"<<pos<<"位置"<<endl; else cout<<"没找到";}#include <iostream>using namespace std;struct ssTable{int *elem;int length;};void CreatssTable(ssTable &s){ int i;cout<<"请输入表长:";cin>>s.length;s.elem=new int [s.length+1];cout<<"\n请输入表中的各个元素:";for(i=1;i<=s.length;i++)cin>>s.elem[i];}int SeqSearch(ssTable s,int key){ int i;s.elem[0] = key; // "哨兵"for (i=s.length; s.elem[i]!=key; --i);return i; // 找不到时,i为0}int BinSearch(ssTable s, int key){ int low ,high,mid;low = 1; high = s.length; // 置区间初值while (low <= high) {mid = (low + high) / 2;if (key == s.elem[mid])return mid; // 找到待查元素else if ( key < s.elem[mid] )high = mid - 1; // 继续在前半区间进行查找else low = mid + 1; // 继续在后半区间进行查找}return 0;}void menu(){cout<<"\n ******************";cout<<"\n 1.SeqSearch";cout<<"\n 2.BinSearch";cout<<"\n 0.exit";cout<<"\n ******************";cout<<"\n Select: ";}void main (){ssTable s;int x,pos;int c;system("c|s");menu();cin>>c;switch (c){case 1:CreatssTable(s);cout <<"请输入要查找的值:";cin>>x;pos=SeqSearch(s,x);if(pos) cout<<x<<"位于表中的第"<<pos<<"位置";else cout<<"没找到!"<<endl;break;case 2:cout<<"\n请按升序输入表中数!/n";CreatssTable(s);cout <<"请输入要查找的值:";cin>>x;pos=BinSearch(s,x);if(pos) cout<<x<<"位于表中的第"<<pos<<"位置";else cout<<"没找到!"<<endl;break;case 0: exit(0);break;default:system("c|s");menu();}}。

相关主题