php快速排序算法实现

php快速排序算法实现

快速排序是一个经典排序算法,他的排序速度更快,所以叫做快排。

像冒泡,插入,选择这种排序的时间复杂度是O(n^2),而快排的时间复杂度是O(nlogn),速度快上不少。

快排的原理是选定一个值,然后把数组中所有小于这个值的放左边,大于的放右边,然后对左边和右边的数组重复上述操作。

  • 选定一个值
  • 小于的放左边
  • 大于的放右边
  • 重复上述操作,也就是递归
  • 最后得到的就是排好序的数组

/**
 * 快速排序
 */
class QuickSort {

    /**
     * 快速排序
     * @param Array $arr 要排序的数组
     * @return Array $arr 排好序的数组
     */
    static function sort(Array $arr) {
        //递归终止条件,当只有一个的时候直接返回
        if (count($arr) <= 1) {
            return $arr;
        }
        //取第一个当中位数
        $mid = $arr[0];
        $l = $r = [];
        //循环一遍,小于的放左边,大于的放右边
        for ($i = 1; $i < count($arr); $i++) {
            if ($arr[$i] >= $mid) {
                $r[] = $arr[$i];
            } else {
                $l[] = $arr[$i];
            }
        }
        //左右递归
        $lsort = self::sort($l);
        $rsort = self::sort($r);
        
        //合并左边,中位数和右边
        return array_merge($lsort, [$mid], $rsort);
    }
}

对于上面的快排算法其实还可以进行优化,主要在选定一开始的值的时候。这个值很关键。

如何优化以后再说。

原创文章 84 获赞 7 访问量 5万+

猜你喜欢

转载自blog.csdn.net/Thepatterraining/article/details/106121609