搜索

news/2024/11/21 21:59:26/

搜索

基本概念

搜索(search)是各种数据结构中的一种常见运算.
搜索是在给定的数据集合中,寻找符合特定条件的数据,用来搜索的这个特定条件称之为键值.
按数据集合所含数据量的大小来分,搜索可分内部搜索和外部搜索.
当数据量较小,可以直接将它载入内存中进行搜索,称这种搜索为内部搜索.
当数据量较大,无法一次将它载入内存进行搜索,
需要使用辅助存储器来分批次处理,称这种搜索为外部搜索 搜索表:由同一类型数据所组成的集合.
关键字:可唯一标识数据的数据项.
搜索:在搜索表查找关键字值与键值相同的数据.
成功搜索:在搜索表查找到关键字值与键值相同的数据.
不成功搜索:在搜索表未查找到关键字值与键值相同的数据.
最大搜索长度:在成功搜索中,关键字值与键值进行比较的最大次数. 
平均搜索长度(average search length):在成功搜索中,关键字值与键值的平均比较次数.
ASL(n) = sum(p(i)c(i))  
n为数据量,p(i)是取第i个数据的概率,c(i)是搜索第i个数据所需的比较次数.

顺序搜索

循序搜索法(linear search)从搜索表的一段开始循序扫描,
依次将搜索表中的结点关键字值和键值进行比较,
若两者相等,则搜索成功;
若扫描结束,还没有找到与键值相等的关键字值,则搜索失败.
#include<iostream>
#include<ctime>
#include<stdlib.h>
using namespace std;
#define n 81
void Create(int *data){for (int i=0;i<n;i++)data[i]=rand()%150+1;
}	 
void Display(int *data){int i,ColNum=0;for(i=0;i<n;i++){cout<<data[i]<<"\t";ColNum++;if(ColNum==9){ColNum=0;cout<<endl;}}cout<<endl;
}void LinearSearch(int *data,int key){int flag=0;for(int i=0;i<n;i++)if(data[i]==key){cout<<"在第"<<i<<"个位置,找到"<<key<<endl;flag=1; }if(flag==0)cout<<"没有找到"<<key<<endl; 
}int main(){int i,key,data[n];srand(time(NULL));//设置随机数发生器种子Create(data);cout<<"搜索数组"<<endl;Display(data);while(1){cout<<"请输入搜索值(1--150),输入-1退出搜索:"<<endl;cin>>key;if(key==-1) break;LinearSearch(data,key); } 
} 

C++中随机函数rand()和srand()的用法请参考

二分搜索

二分搜索法(binary search)只使用于搜索数据已被排序的情况.
假设搜索数据是升序的,二分搜索法是将数据分成两等份,
再比较键值与中间值的大小,如果键值小于中间值,
可确定要搜索的数据为前半部分,否则为后半部分.
如此进行下去,直到搜索成功或不成功.
#include<iostream>
#include<ctime>
#include<stdlib.h>
using namespace std;
#define  N  81void Create(int *data,int n){for (int i=0;i<n;i++)data[i]=rand()%150+1;
}	 
void Display(int *data,int n){int i,ColNum=0;for(i=0;i<n;i++){cout<<data[i]<<"\t";ColNum++;if(ColNum==9){ColNum=0;cout<<endl;}}cout<<endl;
}void LinearSearch(int *data,int key,int n){int flag=0;for(int i=0;i<n;i++)if(data[i]==key){cout<<"在第"<<i<<"个位置,找到"<<key<<endl;flag=1; }if(flag==0)cout<<"没有找到"<<key<<endl; 
}//冒泡排序
void Bubble (int *data,int n){int i,j,index;for(i=1;i<n;i++){for(j=n-1;j>i-1;j--){if(data[j]<data[j-1]){index=data[j];data[j]=data[j-1];data[j-1]=index;				}	}//cout<<"第"<<setw(2)<<i<<"趟排序";Display(data,n); }
}void BinarySearch(int *data,int key,int n){  //数组data,键值key,数组长度n int z,mid,y,flag;// 左中右 标识z=0;y=n-1;if(key<data[z]||key>data[y]){cout<<"键值超出界,无法找到"<<endl;return; }flag=0;while(z<=y){mid=(z+y)/2;if(key<data[mid])y=mid-1;else if(key>data[mid])z=mid+1;else{cout<<"在第"<<mid<<"个位置,搜索到"<<key<<endl;flag=1;break; }}if(flag==0)cout<<"没有搜索到"<<endl; 
}int main(){int i,key,data[N];srand(time(NULL));//设置随机数发生器种子Create(data,N);cout<<"搜索数组"<<endl;Bubble(data,N); Display(data,N);while(1){cout<<"请输入搜索值(1--150),输入-1退出搜索:"<<endl;cin>>key;if(key==-1) break;//	LinearSearch(data,key,N); BinarySearch(data,key,N);} 
} 

二叉搜索树

二叉搜索树就是排序二叉树.
二叉搜索树的创建,插入,查找过程实现(C++)请查看

写于2020-10-28


http://www.ppmy.cn/news/653726.html

相关文章

电脑文件搜索索引关闭

1、按winR键&#xff0c;打开运行框输入services.msc &#xff0c;进入计算机服务 2、找到windows search 点击启动即可。

设计、创建和维护索引(index)(上)以SQL Server数据库为例

设计、创建和维护索引(index)&#xff08;上&#xff09; 1:索引的基本概念: 2:索引的设计准则: 3:索引的类型: 4:聚集索引和非聚集索引: 5:唯一索引和非唯一索引: A:索引的基本概念 索引在关系型数据库中扮演着极其重要的角色,它最主要的作用是: 1:确保数据的唯一性:…

电脑上计算机无法搜索文件,怎么搜索电脑中的文件?电脑搜索文件教程

电脑搜索文件教程 打开“我的电脑”&#xff0c;点击搜索&#xff0c;左边会出现对话框。 如果我们记住了文件名的关键字&#xff0c;可输入文件名&#xff0c;如果仅记住其中的一个字或词组&#xff0c;就输入这个字或词组&#xff0c;不过最好是数量较少有特色的字或词组&…

计算机检索功能如何操作,请问如何设置电脑搜索

不羁到 回答数&#xff1a;30275 | 被采纳数&#xff1a;5 2016-12-09 12:09:43 1&#xff0c;第一个方法&#xff0c;在开始处右键&#xff0c;在弹出菜单中选择“属性”&#xff0c;进入窗口后&#xff0c;按照“[开始]菜单”->“自定义”->“高级”->”[开始]菜单…

我的电脑中的搜索功能用不了怎么办?

今晚回来突然发现我的电脑中的搜索功能用不了&#xff0c;上网搜到解决方案&#xff1a; 方法有2: 1 症状&#xff1a;搜索&#xff0c;帮助打不开 方法&#xff1a;开始&#xff0d;运行 regsvr32 jscript.dll &#xff1b; regsvr32 vbscript.dll &#xff1b; regsvr…

电脑怎么搜索文本内容? 电脑快速搜索内容的技巧

windows系统电脑 点击搜索框 打扯裹柱开资源杰爹管理器&#xff0c;点击右边的搜索框。 点击高级选项 点击工具栏搜索项下的高级选项。 点击文件内容 在下拉选项里选择文件秤娃内容。 输入关键字 在搜索框输入关键字即可开始搜索文档内容了。 mac电脑 输入关键字搜索 打…

计算机 查找 功能的使用,详解电脑搜索快捷键是什么?

办公软件Office使用经常要替换或更改文档上面的字眼&#xff0c;那么如何快速查找文档上面的相关的全部关键词呢&#xff1f;其实Office软件提供内置的搜索查找功能&#xff0c;能够快速定位关键词位置以及个数&#xff0c;甚至快速替换等等&#xff0c;下面小编带你看下搜索快…

吊打本地搜索神器everthing,最快 最强的电脑本地搜索神器!

Windows的小伙伴应该都对Windows资源管理器 自带的『文件搜索功能』说一句“垃圾” 全盘搜索一个文件居然需要几十秒 而为了解决Windows搜索慢的问题 不少小伙伴应该都用过或者听说过『Everything』这个软件 不论磁盘空间多大、存有多少文件 Everything都能以毫秒级的速度搜…