1. 程式人生 > >修煉內功---資料結構與演算法12---快速排序

修煉內功---資料結構與演算法12---快速排序

https://blog.csdn.net/adusts/article/details/80882649

這個部落格寫的很好

<?php

function quick_sort($nums)
{
    if (count($nums) <= 1) {
        return $nums;
    }

    quick_sort_c($nums, 0, count($nums) - 1);
    return $nums;
}

function quick_sort_c(&$nums, $p, $r)
{
    if ($p >= $r) {
        return;
    }

    $q = partition($nums, $p, $r);
    quick_sort_c($nums, $p, $q - 1);
    quick_sort_c($nums, $q + 1, $r);
}

// 尋找pivot
function partition(&$nums, $p, $r)
{
    $pivot = $nums[$r];
    $i = $p;
    for ($j = $p + 1; $j < $r; $j++) {
        // 原理:將比$pivot小的數丟到[$p...$i-1]中,剩下的[$i..$j]區間都是比$pivot大的
        if ($nums[$j] < $pivot) {
            $temp = $nums[$i];
            $nums[$i] = $nums[$j];
            $nums[$j] = $temp;
            $i++;
        }
    }

    // 最後將 $pivot 放到中間,並返回 $i
    $temp = $nums[$i];
    $nums[$i] = $pivot;
    $nums[$r] = $temp;

    return $i;
}



$nums = [4, 5, 6, 3, 2, 1];
$nums = quick_sort($nums);
print_r($nums);