查找函数比较容易理解。本文章仅仅探讨了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语言的小白,本文仅依据个人理解,有什么问题可以评论区留言。谢谢大家!!