顺序查找
实现逻辑
顺序查找(sequential search)就是按照数组的顺序一 一比较数组中的元素的值和所查找的值。如下图表所示,遍历数组进行比较。若找到,则break跳出循环。
| a[0] | a[1] | a[2] | a[3] | a[4] | 
| 9 | 12 | 22 | 13 | 34 | 
| 22==9? | ||||
| 22==12? | ||||
| 22==22? | 
实现代码
#include<stdio.h>
int main(){
	int arr[5]={9,12,22,13,34};
	int i,x,n;
	n=0;	//数组下标记录
	printf("请输入查找元素x:");
	scanf("%d",&x);
	for(i=0; i<5; i++,n++)
		if(arr[i] == x){
			break;
		}
	if(n==5)
		printf("查找失败\n");
	else{
		printf("查找成功,为数组第%d位元素\n",n+1);
	}
	return 0;
} 
运行结果
 
 
折半查找
实现逻辑
折半搜索(英语:half-interval search),也称二分搜索、对数搜索。是一种在有序数组中查找某一特定元素的搜索算法。
折半搜索从数组的中间元素开始比较,若相等,则查找成功;若所查找的元素大于或小于中间元素,则与数组大于或小于中间元素的那一半数组元素的中间元素比较。若在某一步骤数组为空,则代表找不到。
这种搜索算法每一次比较都使搜索范围缩小一半。
例子:
int a[5]={9,10,11,12,13};
int max,min,mid,n=13;//n为搜索元素,a[min]到a[max]则是每轮搜索的范围(边界)。
max=4;min=0; 
第一轮 mid=(min+max)/2=4/2=2;元素n和a[mid]比较,n大于a[mid],则去右半区进行比较。
缩小搜索区域min=mid+1=2+1=3;
第二轮 mid=(3+4)/2=3;元素n和a[mid]比较,n大于a[mid],则去右半区进行比较。
缩小搜索区域min=mid+1=3+1=4;
第三轮 mid=(4+4)/2=4;元素n和a[mid]比较,n等于a[mid],则break跳出循环。
| a[0] | a[1] | a[2] | a[3] | a[4] | 
| 9 | 10 | 11 | 12 | 13 | 
| min |   mid 13==11?  | max | ||
|   min mid 13==12?  | max | |||
|   min mid max 13==13?  | 
实现代码
#include<stdio.h>
int main(){
	//max为数列长度,a[0]作为第一个数组元素
	int a[10]={0,1,2,3,4,5,6,7,8,9},min=0,max=9,mid,n; 
	printf("请输入您要查找的数据:");
	scanf("%d",&n);
	while(min <= max){
		mid = (min+max)/2;
		if(n>a[mid])	//若大于中间元素
			min = mid+1;
		else if(n<a[mid]){//若大于中间元素
			max = mid-1;
		}else{
		printf("输入的数在数列的第%d位\n",mid+1);
			break;
		}
	}
    if(min > max)
		printf("查找失败\n");
    
	return 0;
} 
运行结果




















