数据结构_8:查找:线性查找
来源:互联网 发布:迈远短信平台网页源码 编辑:程序博客网 时间:2024/05/16 01:19
顺序表的查找
- 直接查找
- 复杂度:O(n)
int Sequential_Search(int *a,int n,int key) //n是要查找的长度,key是关键字{ int i; for(i=1;i<=n;i++) { if(a[i]==key) return i; } return 0;}
- 直接查找的改进
- 复杂度O(n)
int Sequential_Search2(int *a,int n,int key) //n是要查找的长度,key是关键字{ int i; a[0]==key; //设置a[0]是关键字,哨兵 i=n; //循环从数组的尾部开始 while(a[i]!=key) { i--; } return i;}
有序表查找
- 折半查找
- 复杂度0(lgn)
int Binary_Search(int *a,int n,int key){ int low,high,mid; low=1; high=n; while(low<=high) { mid=(low+high)/2; if(key<a[mid]) high=mid-1; else if (key>a[mid]) low=mid+1; else return; } return 0;}
- 插值查找
- 表较长,且分布均匀
//改进:mid=low+(high-low)*(key-a[low])/(a[high]-a[low]); // 插值
- 斐波那契查找
- 黄金分割查找
int Fibonacci_Search(int *a,int n,int key){ int low,high,mid,i,k; low=1; high=n; k=0; while(n>F[k]-1) //计算n位于斐波那契数列的位置 k++; for(i=n;i<F[k]-1;i++) // 将不满的数值补全 a[i]=a[n]; while(low<=high) { mid=low+F[k-1]-1; //计算当前的分隔小标 if(key<a[mid]) // 若查找记录小于当前分隔的记录 { high=mid-1; //最高下标调整到分隔下标mid-1 k=k-1; //斐波那契的下标减一 } else if(key>a[mid]) //若查找记录大于当前分隔记录 { low=mid+1; k=k-2; } else { if(mid<=n) return mid; // 说明 找到了位置 else return n; //若mid>n说明补全数值,返回n } } return 0;}
线性索引
- 索引:将一个关键字与它对应的记录相关联的过程
- 一个索引由若干个索引项组成
- 索引项至少包含关键字和其对应的记录在存储器中的位置
- 线性索引;分块索引;倒排索引
稠密索引
- 关键码有序排列
- 索引项有序=可以使用折半,插值,等算法查找
分块索引
- 分块有序:快内无序;快间有序
倒排索引
0 0
- 数据结构_8:查找:线性查找
- 数据结构_8:查找:二叉排序树
- 数据结构_8:查找:C++
- 数据结构_8:查找:Hash:C++
- 数据结构_8:查找:平衡二叉树
- 数据结构_8:查找:Hash:C语言
- 数据结构之线性查找和折半查找
- 数据结构与算法------线性查找
- 数据结构与算法14:线性索引查找
- 【学习笔记----数据结构23-线性索引查找】
- 数据结构之查找(四)——线性索引查找
- 线性查找
- 线性查找
- 线性查找
- 线性查找
- 线性查找
- 线性查找
- 线性查找
- Linux shutdown命令
- #STM32# 学习日志-第4天
- Servlet深入学习,规范,理解和实现(上)
- 搜索引擎常用技巧
- Swift初体验
- 数据结构_8:查找:线性查找
- 编程题#4: 字符串操作(C++程序设计第9周)
- JAVA线程池全解
- android的IP拨号器
- 【微信你妹】中间人攻击截获微信数据
- mysql之控制语句【整理】
- Allegro铜皮倒角技巧-shape倒角
- Java的身份证号码工具类
- 程序员之路的开始