#include <stdio.h> #define Max 30 void myfun(int *p, int n) { int i, left = 0, right = n - 1,
mid;
while (left <= right) {
mid = (left + right) / 2;
if (p[mid] == 0 ) {
printf("%d\n", mid);
return ;
} else if (p[mid] == 1) { //找到一个0,就把它变成1,并向左搜索,看看有没有0
for (i = mid - 1; i >= left; i--) { //向左搜索
if (p[i] == 0 ) { //找到了一个0,就输出并返回
printf("%d\n", i);
return ;
} else p[i] = 1; // 如果是1,就变成1
}
left = mid + 1; //如果一直到了left都是1,那么就要从右边开始找了。 此时right不用动。 left=mid+1.
} else right = mid - 1; //如果中间是2,那么right=mid-1, 继续在左半部分找。
}
}
创作工场
免责声明:
以上内容除特别注明外均来源于网友提问,创作工场回答,未经许可,严谨转载。
点击这里>>使用🔥专业版,更聪明、更完整、更原创!