数据查找有两种常见方法
-
线性查找(或者称顺序查找)
-
折半查找(二分查找)
一,线性查找
线性查找又称顺序查找,顾名思义就是按数组中元素的顺序进行一个一个的查找,算法相对简单直观,但是效率较低
代码如下:
#include <stdio.h>
#define N 50
int main()
{
int scort[N]={0,1,2,3,4,5,6,7,8,9,10,11};
int se = sizeof(scort)/sizeof(scort[0]);
int count = 0;
scanf("%d",&count);//这里接收用户所要查找的数据
int i = 0;
while(i<=se)
{
if(scort[i]==count)
{
printf("找到了,下标是%d",i);
break;//找到了则跳出循环 ,并打印下标
}
i++;
}
if(i>se)
{
printf("error\n");//打印error则表示所找的数据不在该数组中
}
return 0;
}
二,折半查找
折半查找又称二分查找,搜索过程是从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于元素的那一半中查找,而且跟开始一样从中间元素开始比较,若某一个步骤中数组为空,则代表找不到。折半算法虽然稍微复杂一些,但是效率很高
代码如下:
#include <stdio.h>
#define N 50
int main()
{
int scort[N] = {0,1,2,3,4,5,6,7,8,9,10,11};
int right = 11;//右下标
int left = 0;//左下标
int mid;
int count = 0;
scanf("%d",&count);
while(left <= right)
{
mid = (right+left)/2;//中间元素下标
if(scort[mid] > count)
{
right = mid - 1;
}
else if(scort[mid] < count)
{
left = mid + 1;
}
else
{
printf("找到了,下标是%d",mid);
break;
}
}
if(left > right)
{
printf("error\n");
}
return 0;
}