#include <stdio.h> #define P(func, ar, m, x) ({\ printf("%s => %d == %d\n", #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; }
二分查找,折半查找,特殊情况二分查找
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
下一篇:mybatis整合spring

提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
折半查找法(二分查找)
折半查找法(二分查找) 概念:分查找又称折半查找,优点是比较次
二分查找 二分法 折半查找 有序表 -
简易二分(折半)查找
简易二分法
C语言入门 -
二分查找法详解(折半查找)
通过一个实际的例子介绍二分查找法的运用
数组 有序数组 二分查找 -
Python实现二分查找(折半查找)
我们在学习编程语言或者算法设计的时候,总是绕不过
数组 机器学习 深度学习 -
C语言 二分查找/折半查找
二分查找C语言代码实现
中位数 数组 折半查找 -
JavaScript实现折半查找(二分查找)
一、问题描述:在一个升序数组中,使用折半查找...
数组 子数组 折半查找 while语句 有序数组