首页 > 代码库 > 归并排序

归并排序

归并排序是一种很稳定的排序算法,

function 归并排序($arr)
    {
        if (count($arr) <= 1) return $arr;
        $mid = floor(count($arr) / 2);
        $left = array_slice($arr, 0, $mid);
        $right = array_slice($arr, $mid);
        $left = $this->归并排序($left);
        $right = $this->归并排序($right);
        $data = $this->merge($left, $right);
        return $data;
    }
public function merge($a, $b)
    {
        //merge函数将指定的两个有序数组(arr1arr2,)合并并且排序
        //我们可以找到第三个数组,然后依次从两个数组的开始取数据哪个数据小就先取哪个的,然后删除掉刚刚取过///的数据
        $arr = array();
        while (!empty($a) && !empty($b)) {
            //这里不断的判断哪个值小,就将小的值给到arr,但是到最后肯定要剩下几个值,
            //不是剩下arrA里面的就是剩下arrB里面的而且这几个有序的值,肯定比arrC里面所有的值都大所以使用
            $arr[] = $a[0] < $b[0] ? array_shift($a) : array_shift($b);
        }
        return array_merge($arr, $a, $b);
    }

 

归并排序