使用折半查找算法,题目要求如图:
下面展示 处理代码
。
#include<stdio.h>
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("左边界的坐标为:%d\n", location_l+2);//坐标从1开始
break;
}
}
while(true){//计算右边界
if(array[++location_r] == num){
count++;
}else{
printf("右边界的坐标为:%d\n", location_r);//坐标从1开始
break;
}
}
break;
}else if(array[middle] < num){
low = middle+1;
}else{
high = middle-1;
}
}
printf("查找的数字个数为:%d\n", count);
return 0;
}