查找算法-顺序查找-插值查找-斐波那契查找-线性索引查找

查找算法:

静态查找:数据集合稳定,不需要添加、删除元素的查找操作

动态查找:数据集合在查找的过程中需要同时添加或删除元素的查找操作

查找结构:对于静态查找,用线性表来组织结构--使用顺序查找算法;对于动态查找,运用二叉排序树的查找技术...


顺序查找:线性查找

从第一个或最后一个记录开始,逐个进行记录的关键字和给定值比较

//顺序查找

int sq_search(int *a,int n,int key)

{

int i;

for(i=1;i<=n;i++)

{

if(a[i]==key)

{

return i;

}

}

return 0;

 }

#还可以进行优化--


插值查找:按比例查找

其实类似于半值查找

//插值查找

#include<stdio.h>


int bin_search(int str[],int n,int key)

{

int low,high,mid;

low=0;

high=n-1;

while(low<=high)

{

//插值唯一不同处

mid=low+(key-a[low])/(a[high]-a[low])*(high-low);

if(str[mid]==key)

{

return mid;

}

if(str[mid]<key)

{

low=mid+1;

}

if(str[mid]>key)

{

high=mid-1;

}

}

return -1;

 }

#a是下标值的数组


斐波那契查找:

黄金比例、黄金分割:大:小=全部:大=1:0.618

斐波那契额数列:1,1,2,3,5,8,13,21...

A(n-1)/A(n)=0.618

mid=0.618--的插值查找

#如果待查找数据不够,就补充一部分


线性索引查找:

之前的待查找顺序是有序的...

1.稠密索引:建立一个索引表:(下标、关键码、指针),关键码是指关键信息的提炼;指针指向记录,一对一

#应用于数据量不是特别大的

2.分块索引:索引表各块之间存放最大关键字,地址是各块内的起始地址字(按一定比例分块)

#块内无序

3.倒排索引:关键字有一个记录号表

#维护方面比较复杂

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容