基础的查找函数

查找函数比较容易理解。本文章仅仅探讨了3中较为基础的方法,分别是直接查找,排序后查找,和排序后二分查找,其中的二分法比较重要。

#include<stdio.h>
#include<conio.h>
# define N 10
int E[N]={213,111,222,77,400,300,987,1024,632,555};
void ssort(int e[],int n)
{
	int i,j,k,t;
	for(i=0;i<n-1;i++){
	for(k=i,j=i+1;j<n;j++)
		if(e[k]>e[j])
			k=j;
	if(k!=i){
	t=e[i];
	e[i]=e[k];
	e[k]=t;
	}
	}
}
int search1(int *k,int n,int key)
{
	int i;
	for(i=0;k[i]!=key&&i<n;i++);
	return (i<n?i:-1);
}
int search2(int *k,int n,int key)
{
	int i;
	for(i=0;k[i]<key;i++);
	if(i<n&&k[i]==key)
		return i;
	return -1;
}
int binsearch(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;
}
void main()
{
	int i,j=-1;
	printf("初始数据序列为:\n");
	for(i=0;i<N;i++)
		printf("%d ",E[i]);
	printf("\n输入要查找的关键码");
	scanf("%d",&i);
	if((j=search1(E,N,i))+1)
		printf("找到关键字,位置为%d\n",j+1);
	else
		printf("找不到\n");
	getch();
	ssort(E,N);
	printf("\n顺序排序后数据序列为:\n");
	for(i=0;i<N;i++)
		printf("%d ",E[i]);
	printf("\n输入要查找的关键字");
	scanf("%d",&i);
	if((j=search2(E,N,i))>=0)
		printf("找到关键字,位置为%d\n",j+1);
	else
		printf("找不到\n");
	getch();
	printf("\n输入要查找的关键字");
	scanf("%d",&i);
	if((j=binsearch(E,N,i))+1)
		printf("找到关键字,位置为%d\n",j+1);
	else
		printf("找不到\n");
	getch();
}

我是一个学C语言的小白,本文仅依据个人理解,有什么问题可以评论区留言。谢谢大家!!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值