PHP Algorithm - Merge Sort

function merge_sort($arr)
{
    $count = count($arr);
    if ($count <= 1) {
        return $arr;
    }
    $mid = floor($count / 2);
    $left_arr = array_slice($arr, 0, $mid); // recursive split array comparison
    $right_arr = array_slice($arr, $mid);
    $left_arr = merge_sort($left_arr);
    $right_arr = merge_sort($right_arr);
    $arr = merge_arr($left_arr, $right_arr);
    return $arr;
}

/**
 * Compare two [ordered] arrays and merge
 *
 * @param array $left_arr            
 * @param array $right_arr            
 */
function merge_arr($left_arr, $right_arr)
{
    $tmp_arr = [];
    // $i = 0;
    while (count($left_arr) && count($right_arr)) {
        // echo $i ++ . "\n"; // count the number of executions
        $tmp_arr[] = $left_arr[0] <= $right_arr[0] ? array_shift($left_arr) : array_shift($right_arr);
        print_r($tmp_arr);
    }
    return array_merge($tmp_arr, $left_arr, $right_arr);
}

 The idea is that 1 keep dividing the array to the smallest 2 compare the arrays sort 3 merge

Guess you like

Origin http://10.200.1.11:23101/article/api/json?id=326945098&siteId=291194637