顺序表的查找
来源:互联网 发布:object-c编程教程网站 编辑:程序博客网 时间:2024/05/08 16:42
查找的定义是:对给定的一个关键字的值,在数据表中搜索出一个关键字的值等于该值的记录或者元素,若找到了指定的元素,则称为查找成功,通常是返回该元素在查找表中的位置;若不存在指定的元素,则返回一个表示失败的值。
查找算法根据存储数据的结构不同可以分为以下三种:顺序表,也就是数组、树表、散列表等
其中,顺序表根据数据元素是否按顺序排序又可以分为:简单顺序查找(数组元素无序)、二分查找(数组有序)
简单顺序查找:
就是从下表1开始依次比较待查找的元素和数组内元素是否相等,若相等,就返回该元素的下表,否则就返回0;
这里将待查找的元素放在b[0]的位置,是为了避免越界的判断,这样可以节省一半的时间
#include <iostream>using namespace std;const int MAX = 10;int seq_search(int b[],int num,int length){ int i = length; while(b[i] != num) i--; return i;}int main(){ int num; cin>>num; //要查找的元素 int a[] = {3,1,3,7,4,6,5}; int length = sizeof(a)/sizeof(int); int b[MAX]; for(int i=0;i<=length;i++){ if(i == 0) b[i] = num; //将b[0]默认置为要查找的元素,避免越界判断 else b[i] = a[i-1]; } int position = seq_search(b,num,length); cout<<position<<endl; //输出元素所在的位置,没找到的话 输出0 return 0;}
二分查找(数组有序):
1.非递归写法
设置三个标号,low,mid,high,发现如果mid对应的值等于待查找的元素的值,返回mid+1;若待查找的元素小于mid对应的值,则从左边开始找;否则从右边开始找
#include <iostream>using namespace std;int bin_search(int *a,int num,int length){ int mid; int low = 0,high = length-1; while(low<=high){ mid = (low + high)/2; if(num == a[mid]) return mid+1; else if(num < a[mid]) high = mid-1; else low = mid+1; } return -1;}int main(){ int a[] = {1,2,3,4,5,6,7,8,9}; //供查找的有序表 int length = sizeof(a)/sizeof(int); int num; //待查找的元素 cin>>num; int position = bin_search(a,num,length); cout<<position<<endl;}
2.递归写法
#include <iostream>using namespace std;int bin_search(int *a,int num,int low,int high){ int mid; if(low > high) return -1; else{ mid = (low + high)/2; if(num == a[mid]) return mid+1; else if(num < a[mid]) return bin_search(a,num,low,mid-1); else return bin_search(a,num,mid+1,high); }}int main(){ int a[] = {1,2,3,4,5,6,7,8,9}; //供查找的有序表 int length = sizeof(a)/sizeof(int); int num; //待查找的元素 cin>>num; int position = bin_search(a,num,0,length-1); cout<<position<<endl;}
0 0
- 顺序表的查找
- 顺序表的查找
- 顺序表的查找
- 顺序表的查找
- 顺序表的查找
- 顺序表的查找
- 顺序表的查找
- 顺序表的查找
- 顺序表的查找
- 顺序表的查找
- 顺序表的查找
- 线性表的查找-顺序查找
- 顺序表查找的基本知识
- C++ 顺序表的查找
- 线性表的顺序查找
- 线性表的顺序查找
- 顺序表的查找删除
- 【数据结构】顺序表的查找
- 欧美古风格html网站模板
- 设计模式 —— 观察者模式(Observer Pattern)
- 文件比较查看工具——FileMerge
- Extjs导入包的顺序问题
- TLint for 虎扑体育应用源码项目
- 顺序表的查找
- Regsvr 32命令的用处
- delphi 中使用WaitForMultipleObjects等待线程执行,再执行后续代码
- iOS开发~iOS9中iPad横屏时cell不正常显示
- 简单的crackme
- KODI闪退
- UVa 11520 - Fill the Square
- iOS开发插件推荐(1):利用神插件injectionforxcode倍增你的开发效率
- WPF 托盘菜单 自定义菜单风格 的做法