/**
 *
 * @param array $data
 * @return array
 */
public function sort(array $data)
{
    $count_elements = count($data);
    $iterations = $count_elements - 1;

    for ($i=0; $i < $count_elements; $i++) {
        $changes = false;
        for ($j=0; $j < $iterations; $j++) {
            if ($data[$j] > $data[($j + 1)]) {
                $changes = true;
                list($data[$j], $data[($j + 1)]) = array($data[($j + 1)], $data[$j]);
            }
        }
        $iterations--;
        if (!$changes) {
            return $data;
        }
    }
    return $data;
}
                                
                            

                                
/**
 *
 * @param int $element
 * @return mixed
 */
public function search(int $element, array $data)
{
    $begin = 0;
    $end = count($data) - 1;
    $prev_begin = $begin;
    $prev_end = $end;
    while (true) {
        $position = round(($begin + $end) / 2);

        if (isset($data[$position])) {
            if ($data[$position] == $element) {
                return $position;
            }
            if ($data[$position] > $element) {
                $end = floor(($begin + $end) / 2);
            } elseif ($data[$position] < $element) {
                $begin = ceil(($begin + $end) / 2);
            }
        }
        if ($prev_begin == $begin && $prev_end == $end) {
            return false;
        }
        $prev_begin = $begin;
        $prev_end = $end;
    }
}