查找

简介: 查找,也称为检索,是计算机操作中最普通最费时的操作之一。所谓查找,就是根据给定的值(target),在一个表中查找出等于target的数据元素,若表中有这样的元素,则称查找是成功的,并指出该元素在表中的位置;若表中不存在这样的元素,则称查找是不成功的,或称查找失败,并且给出相应的提示。

       查找,也称为检索,是计算机操作中最普通最费时的操作之一。所谓查找,就是根据给定的值(target),在一个表中查找出等于target的数据元素,若表中有这样的元素,则称查找是成功的,并指出该元素在表中的位置;若表中不存在这样的元素,则称查找是不成功的,或称查找失败,并且给出相应的提示。

在日常生活中,有许许多多查找的实例。如在通讯录中查找某人的地址、电话号码;在书目中查找《数据结构》书等。

本章的主要内容包括:

(1)      线性表的查找List searching

包括两个基本算法,顺序查找Sequential search(包括三种有趣的变异)和二分查找Binary search。

(2)哈希(散列)查找

Hashed list searching—根据数据关键字通过一个算法(哈希函数)计算出所查找数据在表中的位置。

包括哈希函数和处理冲突的方法。

虽然本章讨论的查找算法是在数组结构下进行的,但同样也适用于链表结构。实际上,顺序查找和有序表的顺序查找也是链表中查找数据最通用的方法。二分查找树则是达到二分查找效率的树的结构。这些将在相应的章节中讨论。

注:

关键字(key)查找通常是按关键字进行的,所谓关键字(key)是数据元素(或记录)中某个数据项的值,用它可以标识(或识别)一个数据元素。例如,一个学生的信息,可以包含:学号、姓名、性别、年龄、家庭住址、电话号码等,都可以作为关键字。在这些关键字中,有些可以唯一标识一个数据元素,而有些则不能唯一标识一个数据元素。如学生信息中,姓名不能唯一标识一个数据元素(因有同名同姓的人),而学号可以唯一标识一个数据元素(每个学生学号是唯一的,不能相同)。我们将能唯一标识一个数据元素的关键字称为主关键字,而其它关键字称为辅助关键字或从关键字。

 

代码

#include <stdio.h>
#include <stdlib.h>
#define MAX_KEY 100;

int search1(int k[],int n,int key)
{
  int i;
  k[n]=key;
  for (i=0;key!=k[i];i++)
    return i<n?i:-1;   
}   

int search2(int k[],int n,int key)
{
  int i;
  k[n]=MAX_KEY;
  for (i=0;key>k[i];i++);
  if (i<n&&k[i]==key) return i;
  return -1;  
}   

int bin_search(int k[],int n,int key)
{
  int low=0,high=n-1,mid;
  while (low<=high) {
    mid=(low+high)/2;
    if (key==k[mid])  return mid;
    if (key>k[mid]) low=mid+1;
    else high=mid-1;   
  }        
  return -1;
}   

int ins_search(int k[],int n,int key)
{
  int low=0,high=n-1,pos;
  while (low<=high)  {
    pos=(key-k[low])/(k[high]-k[low])*(high-low)+low;
    if (key==k[pos]) return pos;
    if (key>k[pos]) low=pos+1;
    else high=pos-1;       
  }        
  return -1;
}   

int main(int argc, char *argv[])
{
  int a[]={3,4,7,20,45,78,90},i;
  i= bin_search(a,7,45);
  printf("The n is %d\n",i);
 
  system("PAUSE"); 
  return 0;
}

相关文章
|
6月前
|
算法 前端开发
在系统中查找重复文件
在系统中查找重复文件
72 0
|
30天前
|
算法
算法—查找假币
算法—查找假币
45 0
|
3月前
|
算法 C++
查找方式:依次查找与二分查找
查找方式:依次查找与二分查找
|
6月前
查找数据
查找数据。
35 1
|
算法
查找
查找是指在图中寻找特定的节点或边的过程。在图中进行查找操作可以帮助我们找到与目标节点或边相关的信息,或者判断图中是否存在某个节点或边。 在图中进行查找操作的常见算法有: 1. 深度优先搜索(DFS):从图中的一个节点开始,沿着一条路径一直深入直到无法再深入为止,然后回溯到上一个节点,继续深入其他路径,直到找到目标节点或遍历完所有节点。 2. 广度优先搜索(BFS):从图中的一个节点开始,先访问它的所有邻居节点,然后再依次访问邻居的邻居节点,直到找到目标节点或遍历完所有节点。 3. Dijkstra算法:用于在带权有向图中找到从一个节点到其他节点的最短路径。该算法通过不断更新节点的最短距离来逐步
74 0
|
6月前
排序和查找
排序和查找
57 0
|
存储 算法
查找-之有序表查找
待查找的表是有序排列的
93 0
查找-之有序表查找
|
搜索推荐
查找-之二叉排序树(查找、插入、删除)
有序的线性表采用:折半/二分、插值、斐波那契查找相比顺序查找效率得到提高,但是在插入和删除时效率低(为维持数据的有序性) 在高效实现查找操作时,如何提高插入和删除的效率? 在一些应用场景:在查找时需要插入和删除
137 0
查找-之二叉排序树(查找、插入、删除)
|
算法 大数据 索引
算法查找——分块查找
分块查找是折半查找(二分查找)和顺序查找的一种改进方法,分块查找由于只要求索引表是有序的,对块内节点没有排序要求,因此特别适合于节点动态变化的情况。分块查找的速度虽然不如折半查找算法,但比顺序查找算法快得多,同时又不需要对全部节点进行排序
246 0
算法查找——分块查找