Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Test implements IteratorAggregate, Countable
- {
- protected $__data = [];
- function __construct(array $__data = [])
- {
- reset($__data);
- foreach($__data as $v)
- $this->__data[] = $v;
- }
- function binarySearch($__int32, $__index = NULL, $__length = NULL)
- {
- NULL !== $__index ?: $__index = 0x00;
- NULL !== $__length ?: $__length = $this->count() - $__index;
- if($__index + $__length > $this->count())
- {
- var_dump('out of range');
- return FALSE;
- }
- $t = $this->__data;
- $l = $__index;
- $r = $__index + $__length - 1;
- echo __FUNCTION__.":$__int32 from index:$l to index:$r";
- do
- {
- $mid = intval(($l + $r + ($r % 0x02))/0x02);
- //$mid = intval(($r+$l)/0x02);
- if($t[$mid] === $__int32)
- {
- echo " | found $__int32@index $mid";
- return intval(floor($mid));
- }
- else
- if($t[$mid] > $__int32)
- {
- echo " | mid:$mid@ $t[$mid]>$__int32";
- $r = $mid - 0x01;
- }
- else
- if($t[$mid] < $__int32)
- {
- echo " | mid:$mid@ $t[$mid]<$__int32";
- $l = $mid + 0x01;
- }
- }
- while($l <= $r && $mid >= 0x00);
- return FALSE;
- }
- }
- $B = new Test(range(0,9));
- foreach($B as $v)
- {
- $r = $B->binarySearch($v, 0, 10);
- $t = getType($r);
- if($r === false)
- $r = PHP_EOL."\tfalse";
- print ' | ('.$t.') ';
- print $r.PHP_EOL;
- }
- var_dump($B);
- binarySearch:0 from index:0 to index:9 | mid:5@ 5>0 | mid:2@ 2>0 | mid:1@ 1>0 | found 0@index 0 | (integer) 0
- binarySearch:1 from index:0 to index:9 | mid:5@ 5>1 | mid:2@ 2>1 | found 1@index 1 | (integer) 1
- binarySearch:2 from index:0 to index:9 | mid:5@ 5>2 | found 2@index 2 | (integer) 2
- binarySearch:3 from index:0 to index:9 | mid:5@ 5>3 | mid:2@ 2<3 | found 3@index 3 | (integer) 3
- binarySearch:4 from index:0 to index:9 | mid:5@ 5>4 | mid:2@ 2<4 | mid:3@ 3<4 | found 4@index 4 | (integer) 4
- binarySearch:5 from index:0 to index:9 | found 5@index 5 | (integer) 5
- binarySearch:6 from index:0 to index:9 | mid:5@ 5<6 | mid:8@ 8>6 | mid:7@ 7>6 | found 6@index 6 | (integer) 6
- binarySearch:7 from index:0 to index:9 | mid:5@ 5<7 | mid:8@ 8>7 | found 7@index 7 | (integer) 7
- binarySearch:8 from index:0 to index:9 | mid:5@ 5<8 | found 8@index 8 | (integer) 8
- binarySearch:9 from index:0 to index:9 | mid:5@ 5<9 | mid:8@ 8<9 | found 9@index 9 | (integer) 9
- object(ILLI\Core\Std\ArrayList)#2 (1) {
- ["__data":protected]=>
- array(10) {
- [0]=>
- int(0)
- [1]=>
- int(1)
- [2]=>
- int(2)
- [3]=>
- int(3)
- [4]=>
- int(4)
- [5]=>
- int(5)
- [6]=>
- int(6)
- [7]=>
- int(7)
- [8]=>
- int(8)
- [9]=>
- int(9)
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement