快速排序算法


快速排序(Quick Sort)是对冒泡排序的一种改进,属不稳定排序算法,由东尼・霍尔在1962年提出。快速排序基本步骤:从数列中挑出一个元素(一般称为称为“基准”),通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比基准小,另外一部分的所有数据都比基准大,与基准相等的数据可放在两部分中的任一部分,然后再按此方法递归地对这两部分数据分别进行处理,以达到整个数据变成有序序列。快速排序,最好情况下,时间复杂度为O(nlogn);最坏情况下,时间复杂度为O(n2);平均时间复杂度为O(nlogn)。

function quickSort($array){
    $count = count($array);
    //空数组和数组中只有一个元素的时候可以跳出了
    if ($count<=1) return $array;
    $key = $array[0];//取数组第一个元素作为基准数
    $leftArray = array();//比基准数小的数
    $rightArray = array();//比基准数大的数
    for ($i=1; $i<$count; $i++){
        if ($array[$i]<$key){
            $leftArray[] = $array[$i];
        }else{
            $rightArray[] = $array[$i];
        }
    }
    //对左边切分的数组进行递归计算
    $leftArray = quickSort($leftArray);
    $rightArray = quickSort($rightArray);
    //合并数组
    return array_merge($leftArray, array($key), $rightArray);
}


你可能感兴趣的:(算法,快速排序)