标签: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