栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

使用c进行折半查找(元素可重复)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用c进行折半查找(元素可重复)

使用折半查找算法,题目要求如图:

下面展示 处理代码。

#include
int main(){
	int N; 
	printf("请输入要查询的有序数组的长度:n");
	scanf("%d", &N);
	int array[N];
	printf("请输入要查询的数组:n");
	for(int i = 0; i < N; i++){
		scanf("%d", &array[i]);
	} 
	//printf("%d", sizeof(array)/sizeof(array[0])); //数组长度
	//折半查找
	int low = 0;
	int high = N-1;
	int num=-1;
	int count = 0;//记录查询数字出现的次数 
	int location_r = -1;//记录右边界 
	int location_l = -1;//记录左边界 
	printf("请输入要查询的数字:n");
	scanf("%d", &num); 
	while(low <= high){
		int middle = (low+high)/2;
		if(array[middle] == num){
			count++;
			location_l=location_r=middle; 
			while(true){
				//计算左边界
				if(array[--location_l] == num){//边界溢出的判断 
					count++;
				}else{
					printf("左边界的坐标为:%dn", location_l+2);//坐标从1开始  
					break;
				}		
			}
			while(true){//计算右边界 
				if(array[++location_r] == num){
					count++;
				}else{
					printf("右边界的坐标为:%dn", location_r);//坐标从1开始  
					break;
				}		
			}
			break;
		}else if(array[middle] < num){
			low = middle+1;
		}else{
			high = middle-1;
		}
	}
	printf("查找的数字个数为:%dn", count);
	return 0;
} 
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/303948.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号