大佬教程收集整理的这篇文章主要介绍了二分查找,折半查找,特殊情况二分查找,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
#include <stdio.h>
#define P(func, ar, m, X) ({
printf("%s => %d == %dn", #func, x, func(ar, m, X));
})
int binary_search(int *ar, int m, int X) {
int mid = (m - 1) >> 1, min = 0, max = m - 1;
for (; min <= max && ar[mid] != x; mid = (min + maX) >> 1)
ar[mid] > x && (max = mid - 1, 1) || (min = mid + 1);
return ar[mid] ^ x ? -1 : mid;
}
//全01时,查找最后一个1
int binary_search1(int *ar, int m, int X) {
int mid = m >> 1, min = -1, max = m - 1;
for (; min < max; mid = (min + max + 1) >> 1)
ar[mid] && (min = mid) || (max = mid - 1);
return min;
}
//全01时,查找第一个1
int binary_search2(int *ar, int m, int X) {
int mid = m >> 1, min = 0, max = m;
for (; min < max; mid = (max + min) >> 1)
ar[mid] && (max = mid) || (min = mid + 1);
return max ^ m ? max : -1;
}
int main() {
int ar12[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
int ar[] = {1, 2, 3, 4, 11, 12, 13, 14, 15, 16}, ar1[] = {1, 1, 1, 1, 0, 0, 0, 0, 0, 0}, ar2[] = {0, 0, 0, 0, 1, 1, 1, 1, 1, 1};
P(binary_search, ar, 10, 17);
P(binary_search, ar, 10, 15);
P(binary_search1, ar12, 10, 1);
P(binary_search1, ar1, 10, 1);
P(binary_search2, ar12, 10, 1);
P(binary_search2, ar2, 10, 1);
return 0;
}
以上是大佬教程为你收集整理的二分查找,折半查找,特殊情况二分查找全部内容,希望文章能够帮你解决二分查找,折半查找,特殊情况二分查找所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。