标签:c语言 logs 行记录 ati 折半查找 length 文章 code 动态查找表
1.基本概念
查找表:是由同一类型的元素构成的集合
关键字:数据元素中某个数据项的值
静态查找表和动态查找表
静态查找表:查询某个“特定的”数据元素是否在查找表中
查询某个“特定的”数据元素和各种属性
动态查找表:在查找的过程中同时插入查找表中不存在的数据元素,或者从查找表中删除已经存在的某个数据元素
2.各种查找算法的比较
(1)线性查找
从表中的第一个(或最后一个)记录开始。组个进行记录的关键字和给定比值的比较,若某个记录的关键字和给定值相等,则查找成功。
C语言代码
1 int Sequential_Serach(int a[],int n,int key){ //a为数组,n为要查找的数组长度,key为要查找的关键字 2 int i; 3 for(i=1;i<=n;i++){ 4 5 if(a[i]=key) 6 return i; 7 } 8 return 0; 9 }
Java代码
1 public static int Sequuential_Search(int [] a,int key){ 2 for(int i=1;i<=a.length;i++){ 3 if(a[i]==key){ 4 return i; 5 } 6 } 7 return 0; 8 }
1 //线性查找表的优化 2 public int Sequential_Search2(int [] a,int key){ 3 int i=a.length; 4 a[0]=key; //设置a[0]为关键字值 5 while(a[i]!=key){ //从数组尾部开始查找 6 i--; 7 } 8 return i; //返回0这说明查找失败,a[1]-a[n]中没有关键字 9 }
(2)折半查找
这种查找方法的前提是线性表中的记录必须是有顺序的,也就是说线性表必须采用顺序存储,基本思想:去取中间记录作为比较对象,若给定的值与中间记录的关键字相等,这还则查找成功,若给定值小于中间记录的关键字,则在左半区继续查找,相反在右半区进行查找,不断重复,找到为止。
C语言代码
1 int Binary_Serach(int a [],int n,int key){ 2 int low,hing,mid; 3 low=1; 4 high=n; 5 while(low<=high){ 6 mid=(low+high)/2; 7 if(key<a[mid]) 8 high=mid-1; 9 else if(key>a[mid]) 10 low=mid-1; 11 else 12 return mid; 13 } 14 return 0; 15 }
Java代码
1 public int Binary_Search(int [] a,int n,int key){ 2 int low,high,mid; 3 low=1; 4 high=n; 5 while(low<=high){ 6 mid=(low+high)/2; 7 if(key<a[mid]) 8 high=mid-1; 9 else if(key>a[mid]) 10 low=mid-1; 11 else 12 return mid; 13 } 14 return 0; 15 }
(3)插值查找
直接上代码吧
1 public int Binary_Search(int [] a,int n,int key){ 2 int low,high,mid; 3 low=1; 4 high=n; 5 while(low<=high){ 6 mid=low+(high-low)*(key-a[low])/(a[high]-a[low]); 7 if(key<a[mid]) 8 high=mid-1; 9 else if(key>a[mid]) 10 low=mid-1; 11 else 12 return mid; 13 } 14 return 0; 15 }
(4) 斐波拉挈查找
标签:c语言 logs 行记录 ati 折半查找 length 文章 code 动态查找表
原文地址:http://www.cnblogs.com/zhuchuanliang/p/7067549.html