顺序查找和二分查找可以说是查找里面最容易写的算法了:
顺序查找:
#include<stdio.h>
#include<stdlib.h>
//顺序查找-从后向前
int Search(int *digit,int length,int k)
{
int pos;
digit[0]=k; //如果查找不成功返回0
for(pos=length;pos>=1;pos--)
if(*((digit)+pos) == k)return pos;
}
int main()
{
int *digit;
int i,n,k;
scanf("%d",&n);
digit = (int*)malloc(sizeof(int)*(n+1));
for(i=1;i<=n;i++)
scanf("%d",digit+i);
scanf("%d",&k);
printf("%d\n",Search(digit,n,k));
return 0;
}
#include<stdio.h>
#include<stdlib.h>
//二分查找
int Search(int *digit,int length,int k)
{
int high=length,low=1;
int mid;
while(low<=high)
{
mid = (high+low)>>1;
if(digit[mid] == k)return mid;
else if(digit[mid] > k)
{
high = mid-1;
mid = (high+low)>>1;
}
else if(digit[mid] < k)
{
low = mid+1;
mid = (high+low)>>1;
}
}
return -1; //元素查找不到返回-1
}
int main()
{
int *digit;
int i,n,k;
scanf("%d",&n);
digit = (int*)malloc(sizeof(int)*(n+1));
for(i=1;i<=n;i++)
scanf("%d",digit+i);
scanf("%d",&k);
printf("%d\n",Search(digit,n,k));
return 0;
}