使用折半查找算法,题目要求如图:
下面展示 处理代码。
#includeint 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; }



