顺序查找

一、定义:
按照序列原有顺序对数组进行遍历比较查询的基本查找算法
二、基本原理:
对任意一个序列以及一个给定的元素,将给定元素与序列中元素依次比价,直到找出与给定关键字相同的元素,或将序列中的元素与其都比较完为止。
三、适用方式:
顺序表、链表
四、实现
设有一个数据集合,{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)
缺点:不适合大数据集合

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值