搜索算法实例C源码

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

玩转算法与数据结构之搜索算法

—HIT2000鲁天伟

搜索算法,是在计算机存储的数据中,如何高效的找到所需要的数据。下面我们要给出的就是搜索常用算法实例,供大家学习使用。

搜索算法如下:

线性搜索:整型数组int data[n],要搜索的数据是key。从左起第1个数据开始向右逐个比对,找到则返回位置值,查找游标(数组位置标识变量)越界则表示没有这个数据。线性搜索代码如下:

int linerSearch(int* data,int key,int len){

int index=0;

int counter=0;

for(index=0;index

if(data[index]==key)

break;

}

if(index

printf("Found it,position in array is %d\n",index);

return index;

}

else

printf("Not found\n");

return-1;

}

折半搜索:有序(按从小到大顺序排列)整型数组int data[n],要搜索的数据是key。取left游标表示数组左起始位置,取right游标表示数组的右终止位置。取mid=(left+right)/2,如果data[mid]==key返回mid值,如果data[mid]>key, right=mid-1;如果data[mid]right, 此时表示数组中没有key数据。

折半搜索代码如下:

int zeBan(int*data,int key,int left,int right){

int middle;

int position=-1;

if(left<=right){

middle=(left+right)/2;

if(key==data[middle]){

position=middle;

printf("Found it,position in array is %d\n",position);

}

else{

if(key

position=zeBan(data,key,left,middle-1);

else

position=zeBan(data,key,middle+1,right);

}

}

else{

printf("Not found\n");

}

return position;

}

斐波那契搜索: 有序(按从小到大顺序排列)整型数组int dataF[n], 要搜索的数据是key。先根据斐波那契数列计算找出K,使FIB(K)-1>=n,K从3开始向上取值(数组中至少要有一个数据)。如果FIB(K)-1==n那么不用拓展数组,如果FIB(K)-1>n则拓展数组dataF 长度,至FIB(K)-1;多出来的位置都用原数组最后一个数据dataF[n-1]来填充。如此得到一个长为FIB(K-1)的新数组data,取游标left表示数组左起位置,取游标right表示数组右止位置。Mid=left+FIB(K-1)-1(即数组中左起第FIB(K-1)个元素,即在FIB(K)-1个元素的数组中,取左起第FIB(K-1)个数据来作为“中位数”), 除去这个Mid位置,新数组被分为两段,左面长度为FIB(K-1)-1, 因为FIB(K)=FIB(K-1)+FIB(K-2),所以右面长度为FIB(K-2)-1(这就是为什么原数组要扩展到FIB(K)-1个数,而不是其它值的原因,看下是不是形成了递归的样子FibSearch(int key,int K,int left,int right,int len)。如果data[Mid]==key,如果Mid=n,则返回n-1(新数组data从n 到FIB(K)-2的值都是dataF[n-1]的拷贝)。如果data[Mid]

斐波那契搜索代码如下:

#include

#include

#define MAX 28

int

dataF[MAX]={1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31,33,35,37,39,41 ,43,45,47,49,51,53,55};

int*data;

int Fib(int N){

if(N<=1)

return N;

else

return Fib(N-1)+Fib(N-2);

}

相关文档
最新文档