一、定义:
按照序列原有顺序对数组进行遍历比较查询的基本查找算法
二、基本原理:
对任意一个序列以及一个给定的元素,将给定元素与序列中元素依次比价,直到找出与给定关键字相同的元素,或将序列中的元素与其都比较完为止。
三、适用方式:
顺序表、链表
四、实现
设有一个数据集合,{5,2,9,23,6,17,54}给定某一关键字key,在数据集合中查找key值所对应的数据元素,若找到返回下标,否则返回-1
方法一:顺序表实现
#include<stdio.h>
#define N 7
int Search(int a[],int n,int key){
int i,tag=-1;
for(i = 0;i<n;i++){
if(a[i]==key){//找到key值
tag = i;
}
}
return tag;
}
int main(void)
{
int a[N]={5,2,9,23,6,17,54};
int i,key;
printf("请输入你要查找的值:");
scanf("%d",&key);
i = Search(a,N,key);
printf("%d",i);
return 0;
}
或者也可以写成这种形式
int Search(int a[],int n,int key){
int i;
for(i = 0;i<n&&a[i]-key;i++);
if(i==n){//没找到key值
i = -1;
}
return i;
}
方法二:链表法
#include<stdio.h>
#include<stdlib.h>
#define N 7
typedef struct node{
int data;
struct node *next;
}ElemSN;
//创建链表
ElemSN * CreateLink(int a[],int n){
ElemSN *h,*tail;
int i;
h = tail =(ElemSN *)malloc(sizeof(ElemSN));
h->data=a[0];
h->next=NULL;
for(i = 1;i<n;i++){
tail =tail->next = (ElemSN *)malloc(sizeof(ElemSN));
tail->data=a[i];
tail->next=NULL;
}
return h;
}
//查找关键字
ElemSN *Search(ElemSN *h,int key){
ElemSN *p;
for(p=h;p&&p->data-key;p=p->next);
return p;
}
int main(void)
{
int a[N]={5,2,9,23,6,17,54};
int key;
ElemSN *head,*p;
printf("请输入你要查找的值:");
scanf("%d",&key);
head = CreateLink(a,N);
p = Search(head,key);
printf("%d",p);
return 0;
}
时间复杂度O(n)
缺点:不适合大数据集合