码迷,mamicode.com
首页 > 其他好文 > 详细

数据结构-----------查找

时间:2017-06-22 22:55:26      阅读:171      评论:0      收藏:0      [点我收藏+]

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!