提到查找算法,最简单的就是顺序查找算法,但很明显,顺序查找算法时间复杂度是比较大的。
#include<stdio.h>
int seek(int a[], int x);//顺序查找
int main()
{
int a[20];
int i;
int x;
for (i = 0; i < 20; i++)
scanf_s("%d", &a[i]);
scanf_s("%d", &x);
if (seek(a, x) == -1)
printf("数组中不存在该元素");
else
printf("%d", seek(a, x));
return 0;
}
int seek(int a[], int x)
{
int j;
int flag=-1;//查找到的数组下标
for (j = 0; j < 20; j++)
if (a[j] == x)
flag=j;
return flag;
}
那么对于那些排序好的数组,可以使用一些更实用的算法
比如,二分查找法
该算法时间复杂度虽然明显降低,但是需要注意该算法只适用与已经排序好的排列中。
代码实现
首先输入数组元素值,以及需要查找的元素值
然后将查找元素与数组中值比较,这里比较三分之一值等等都可以,但是代码就需要微改一下
使用一个标志变量来存贮比较结果
定义函数实现,需要定义一个返回值来存贮目标元素下标以及判断是否找到该元素
由传入的标志变量来判断
最后输出
然后是完整代码
#include<stdio.h>
int seek(int a[], int x,int i);//二分查找
int main()
{
int a[20];
int i;
int x=0;
for (i = 0; i < 20; i++)
scanf_s("%d", &a[i]);//输入数组元素
scanf_s("%d", &x);//输入需要查找的元素
int big = 0;
if (x == a[10])//将查找元素与数组中值比较
big = 0;
else if (x < a[10])
big = -1;
else if (x > a[10])
big = 1;
if (seek(a, x, big) == -1)
printf("数组中不存在该元素");
else if (big == 1)
printf("%d", seek(a, x, big));
else if (big == 0)
printf("%d", a[10]);
return 0;
}
int seek(int a[], int x,int i)
{
int j;
int flag=-1;//查找到的数组下标
if(i==-1)
for (j = 0; x < a[j]; j++)
{
if (x == a[j])
flag = j;
}
if(i==1)
for (j = 10; x < a[j]; j++)
{
if (x == a[j])
flag = j;
}
return flag;
}
注意:二分查找算法前提是序列已排序完成,否则需要再加一个排序算法。