14、折半查找法

14、折半查找法

#include<stdio.h>
int main(){
	int n[15], i, x, right, left, mid, find, position;
	printf("请按照由大到小的顺序输入15个数:\n");
	i=0;
	find=0;
	for(i=0; i<15; i++){
		scanf("%d", &n[i]);		//注意%d后不要加空格,否则要输入16个数
	}
	printf("请输入要查找的数:\n");
	scanf("%d", &x); 

	left=0;
	right=14;
	while(left <= right){		//注意是<=
//有等号的情况:从5个数中找:一开始left=0,right=4——mid=2,(假设数据由大到小排列,要找的数x等于第2个数a[1]),之后left=0,right=mid-1=1——mid=0,再之后left=mid+1=1,right=1,回到while(left<=right),此时left和right相等,为真——mid=1——找得。
//没有等号的情况:从3个数中找,一开始left=0,right=2——mid=1,(假设数据从小到大排列,要找的数x等于第1个数a[0]),之后left=0,right=mid-1=0,回到while(left<right),但left和right相等,为假——没找得。
		mid = (left+right)/2;
		if(x == n[mid]){
			find=1;
			position = mid;
			break;
		}else{
			if(x>n[mid]){
				right = mid-1;
			}else{
				left = mid+1;
			}
		}
	}
	if(find == 1){
		printf("%d是第%d个数", x, position);
	}else{
		printf("没有这个数");
	}
	return 0;
}
发布了16 篇原创文章 · 获赞 0 · 访问量 317

猜你喜欢

转载自blog.csdn.net/NAU_LHT/article/details/104333755
今日推荐