<?php
function
findMinIndex(&
$arr
,
$low
,
$high
)
{
if
(
$high
<
$low
)
return
0;
if
(
$high
==
$low
)
return
$low
;
$mid
=
intval
((
$low
+
$high
) / 2);
if
(
$mid
<
$high
&&
$arr
[
$mid
+ 1] <
$arr
[
$mid
])
return
(
$mid
+ 1);
if
(
$mid
>
$low
&&
$arr
[
$mid
] <
$arr
[
$mid
- 1])
return
$mid
;
if
(
$arr
[
$high
] >
$arr
[
$mid
])
return
findMinIndex(
$arr
,
$low
,
$mid
- 1);
return
findMinIndex(
$arr
,
$mid
+ 1,
$high
);
}
function
binary_search(&
$arr
,
$l
,
$h
,
$x
)
{
while
(
$l
<=
$h
)
{
$mid
=
intval
((
$l
+
$h
) / 2);
if
(
$arr
[
$mid
] <=
$x
)
$l
=
$mid
+ 1;
else
$h
=
$mid
- 1;
}
return
$h
;
}
function
countEleLessThanOrEqual(&
$arr
,
$n
,
$x
)
{
$min_index
= findMinIndex(
$arr
, 0,
$n
- 1);
if
(
$x
<=
$arr
[
$n
- 1])
return
(binary_search(
$arr
,
$min_index
,
$n
- 1,
$x
) + 1 -
$min_index
);
if
((
$min_index
- 1) >= 0 &&
$x
<=
$arr
[
$min_index
- 1])
return
(
$n
-
$min_index
+
binary_search(
$arr
, 0,
$min_index
- 1,
$x
) + 1);
return
$n
;
}
$arr
=
array
(6, 10, 12, 15, 2, 4, 5);
$n
= sizeof(
$arr
);
$x
= 14;
echo
"Count = "
. countEleLessThanOrEqual(
$arr
,
$n
,
$x
);
?>